質問編集履歴

1

a

2024/07/02 10:19

投稿

johnwick
johnwick

スコア13

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が含まれている事は違うと思います。