Nuxt + TypeScriptのプロジェクトなのですが、以下のようなタイプがあったとします。
TypeScript
1type Hoge = { 2 userid: string 3 username: string 4} 5type Huga = { 6 a: number 7 b: string 8} 9 10type Both = Partial<Hoge> & Partial<Huga>
そして上記タイプBothのオブジェクトHogeとHugaのkeyを要素に持つリストがあります。
TypeScript
1const piyo:Both = {userid: "aaa"} 2 3const index : string[] = ["userid"]
この上記piyoに対してindexを以下の様に指定して値を取得しようとしています。
TypeScript
1piyo[index[0]]//←ここでwarning
すると上記に対して以下のVeturのwarningが出てしまいます。
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Both'.
No index signature with a parameter of type 'string' was found on type 'Both'.Vetur(7053)
これはstringでkeyを指定しているからBothのkeyにあたるuserid,username,a,b以外がindexの中身だった場合にanyになってしまうという事なのでしょうか?
以下でindexのtypeをstring[]ではなく
TypeScript
1const index : ("userid" | "username" | "a" | "b")[] = ["userid"]
この様にしたらwarningは出ない様でした。しかしこのBothが取り得るkeyの数が実際にはたくさんあるのですが、これを全て型として保持しておくにはどうも面倒な気がするのですがこれはそうするしか他ないのでしょうか?
Playground
正しいアーキテクチャというか、この場合こうした方が良いというアイディアをお持ちの方はご教示頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/02 02:10
2022/01/02 02:26