質問するログイン新規登録

質問編集履歴

1

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

2021/03/05 10:46

投稿

swirlies
swirlies

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  ### 知りたいこと
2
2
 
3
- TypescriptでRecord<string, unknown>を引数にとる関数にinterfaceで型付けしたオブジェクトを渡そうとするとエラーになるのですが、その理由を知りたいです。Type Aliasで型付けすると渡せるので、interfaceとType Aliasの挙動の違いに原因があるのかと思ったのですが、調べても原因を見つけられなかったので、、ご教授いただけると幸いです。
3
+ TypescriptでRecord<string, unknown>を引数にとる関数にinterfaceで型付けしたオブジェクトを渡そうとするとエラーになるのですが、その理由を知りたいです。
4
+ Type Aliasで型付けすると渡せるので、interfaceとType Aliasの挙動の違いに原因があるのかと思ったのですが、調べても原因を見つけられなかったので、、ご教授いただけると幸いです。
4
5
 
5
6
  ### エラーとなるコード
6
7
  インデックスシグネチャがinterfaceで型付けしたオブジェクトにはありませんといったエラーがでます。
@@ -35,6 +36,23 @@
35
36
  func(target)
36
37
  ```
37
38
 
39
+ interfaceのインデックスの型をstringとしてあげると問題ないようです。
40
+ ```typescript
41
+ const func = <T extends Record<string, unknown>>(obj: T) => obj
42
+
43
+ // indexをstringと定義
44
+ interface Target {
45
+ [index: string]: string
46
+ }
47
+
48
+ const target: Target = {
49
+ hoge: "hoge"
50
+ }
51
+
52
+ // OK
53
+ func(target)
54
+ ```
55
+
38
56
  ### 補足情報
39
57
 
40
58
  typescriptのバージョンは4.1.3です。