質問編集履歴
1
a
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,6 +3,19 @@
|
|
3
3
|
|
4
4
|
### 前提
|
5
5
|
以下のようなソースコードの場合、インデックス100は範囲外なので、userNameにundefinedが代入されるはずです。
|
6
|
+
|
7
|
+
```typescript
|
8
|
+
const users: Record<number, string> = {
|
9
|
+
0: 'takahashi',
|
10
|
+
1: 'yamada',
|
11
|
+
2: 'tanaka'
|
12
|
+
}
|
13
|
+
|
14
|
+
// userNameの型は string | undefined を期待しているが、stringになっている
|
15
|
+
const userName = users[100]
|
16
|
+
const lowerCaseUserName = userName.toLowerCase()
|
17
|
+
```
|
18
|
+
|
6
19
|
しかし、コードを書いているときはこのような問題に気づけません。
|
7
20
|
また、そもそもuserName変数は`string | undefined`ではなく、`string`になっています。
|
8
21
|
|
@@ -16,19 +29,6 @@
|
|
16
29
|
// 'userName' は 'undefined' の可能性があります。 ts(18048)
|
17
30
|
```
|
18
31
|
|
19
|
-
### 該当のソースコード
|
20
|
-
|
21
|
-
```typescript
|
22
|
-
const users: Record<number, string> = {
|
23
|
-
0: 'takahashi',
|
24
|
-
1: 'yamada',
|
25
|
-
2: 'tanaka'
|
26
|
-
}
|
27
|
-
|
28
|
-
// userNameの型は string | undefined を期待しているが、stringになっている
|
29
|
-
const userName = users[100]
|
30
|
-
const lowerCaseUserName = userName.toLowerCase()
|
31
|
-
```
|
32
32
|
|
33
33
|
### 試したこと
|
34
34
|
- 以下のように書く事で期待するような事が出来るのですが、Recordの型を変更するのは違うと思っています。keyが見つからずにundefinedになる事と、valueにundefinedが含まれている事は違うと思います。
|