質問編集履歴

1

interfaceのインデックスの型をstringとしたときの挙動を追記

2021/03/05 10:46

投稿

swirlies
swirlies

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- TypescriptでRecord<string, unknown>を引数にとる関数にinterfaceで型付けしたオブジェクトを渡そうとするとエラーになるのですが、その理由を知りたいです。Type Aliasで型付けすると渡せるので、interfaceとType Aliasの挙動の違いに原因があるのかと思ったのですが、調べても原因を見つけられなかったので、、ご教授いただけると幸いです。
5
+ TypescriptでRecord<string, unknown>を引数にとる関数にinterfaceで型付けしたオブジェクトを渡そうとするとエラーになるのですが、その理由を知りたいです。
6
+
7
+ Type Aliasで型付けすると渡せるので、interfaceとType Aliasの挙動の違いに原因があるのかと思ったのですが、調べても原因を見つけられなかったので、、ご教授いただけると幸いです。
6
8
 
7
9
 
8
10
 
@@ -72,6 +74,40 @@
72
74
 
73
75
 
74
76
 
77
+ interfaceのインデックスの型をstringとしてあげると問題ないようです。
78
+
79
+ ```typescript
80
+
81
+ const func = <T extends Record<string, unknown>>(obj: T) => obj
82
+
83
+
84
+
85
+ // indexをstringと定義
86
+
87
+ interface Target {
88
+
89
+ [index: string]: string
90
+
91
+ }
92
+
93
+
94
+
95
+ const target: Target = {
96
+
97
+ hoge: "hoge"
98
+
99
+ }
100
+
101
+
102
+
103
+ // OK
104
+
105
+ func(target)
106
+
107
+ ```
108
+
109
+
110
+
75
111
  ### 補足情報
76
112
 
77
113