このコードが TypeScript エラーを生成する理由がわかりません。(これは元のコードではなく、少し派生したものなので、例の意味不明な部分は無視してください)。
interface Images {
[key:string]: string;
}
function getMainImageUrl(images: Images): string {
return images.main;
}
このエラーが発生します (TypeScript 1.7.5 を使用)。
エラー TS2339: プロパティ 'main' はタイプ 'Images' に存在しません。
もちろん、次のように記述することでエラーを解消できます。
return images["main"];
プロパティにアクセスするために文字列を使用したくないのですが、どうすればよいでしょうか?
ベストアンサー1
正しい修正方法は、@Nitzan Tomer の回答で説明されているように、型定義にプロパティを追加することです。ただし、それが選択肢にない場合は、次の操作を行います。
(ハッキー)回避策 1
オブジェクトを型の定数に割り当てることができますどれでも、「存在しない」プロパティを呼び出します。
const newObj: any = oldObj;
return newObj.someProperty;
次のようにキャストすることもできますany
:
return (oldObj as any).someProperty;
ただし、これでは TypeScript の目的である型の安全性は提供されません。
回避策2
元のタイプを変更できない場合は、次のことも検討してください。型を拡張するそのようです:
interface NewType extends OldType {
someProperty: string;
}
これで、変数をNewType
の代わりにとしてキャストできるようになりましたany
。まだ理想的ではありませんが、 よりも許容度が低くany
、型の安全性が高まります。
return (oldObj as NewType).someProperty;