Javascript のオブジェクトにプログラムでプロパティを割り当てたい場合は、次のようにします。
var obj = {};
obj.prop = "value";
しかし、TypeScript では、これによりエラーが発生します。
プロパティ「prop」は、型「{}」の値に存在しません
TypeScript のオブジェクトに新しいプロパティを割り当てるにはどうすればよいですか?
Javascript のオブジェクトにプログラムでプロパティを割り当てたい場合は、次のようにします。
var obj = {};
obj.prop = "value";
しかし、TypeScript では、これによりエラーが発生します。
プロパティ「prop」は、型「{}」の値に存在しません
TypeScript のオブジェクトに新しいプロパティを割り当てるにはどうすればよいですか?
または、一度にすべて:
var obj:any = {}
obj.prop = 5;
コンパイラは不平を言いますが、必要に応じて出力する必要があります。ただし、これは機能します。
const s = {};
s['prop'] = true;
そのためのもう 1 つのオプションは、コレクションとしてプロパティにアクセスすることです。
var obj = {};
obj['prop'] = "value";
これを使用できます:
this.model = Object.assign(this.model, { newProp: 0 });
Object.assign
これは、プロパティが変更されるたびに変数の型を自動的に調整する の特別なバージョンです。追加の変数、型アサーション、明示的な型、またはオブジェクトのコピーは必要ありません。
function assign<T, U>(target: T, source: U): asserts target is T & U {
Object.assign(target, source)
}
const obj = {};
assign(obj, { prop1: "foo" })
// const obj now has type { prop1: string; }
obj.prop1 // string
assign(obj, { prop2: 42 })
// const obj now has type { prop1: string; prop2: number; }
obj.prop2 // number
// const obj: { prop1: "foo", prop2: 42 }
注: このサンプルでは、TS 3.7アサーション関数を使用しています。の戻り値の型はassign
とはvoid
異なり、Object.assign
です。
「any」に型キャストすることにより、あらゆる種類のオブジェクトに新しいプロパティを保存します。
var extend = <any>myObject;
extend.NewProperty = anotherObject;
後で、拡張オブジェクトを「any」にキャストすることで取得できます。
var extendedObject = <any>myObject;
var anotherObject = <AnotherObjectType>extendedObject.NewProperty;
この宣言を追加して、警告を黙らせることができます。
declare var obj: any;