TypeScriptでオブジェクトをより安全に扱いたいため質問です。
const data = ['logo.png','search.png','stock.png'] //本当は画像データを想定した文字列 interface objType { [key: string]: string; } const nameObj: objType = { 'logo': "", 'search': "" }; data.map((name: string) => { const imgName = name.split(".")[0]; nameObj[imgName] = name; return; }); console.log(nameObj);
nameObj は入ってくることが事前にわかっている画像データ名のオブジェクトです。
キーに 'logo', 'search' が入っておりそれ以外は入れたくありません。
問題
上のコードを実行すると
{ "logo": "logo.png", "search": "search.png", "stock": "stock.png" }
が返ってきてしまいます。
キーに 'logo', 'search' のみが入り他のプロパティは入ってきて欲しくありません。(エラーになって欲しい)。
試したこと
interface objType { [key: string]: string; }
interfaceの定義が[key: string]プロパティ形式であればなんでも入るようにしていることが原因ではあります。
しかし
interface objType { "logo": string, "search": string }
とすると、
nameObj[imgName] = name;
の行に対して、
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'objType'. No index signature with a parameter of type 'string' was found on type 'objType'.(
上のように未定義の型が入ってきてしまうと型のメッセージが当然ながら出てきてしまいます。
質問
どのようにすれば nameObj に入れる型を限定しながら data.map(省略) を回す処理ができるようになるでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。