657

Javascript のオブジェクトにプログラムでプロパティを割り当てたい場合は、次のようにします。

var obj = {};
obj.prop = "value";

しかし、TypeScript では、これによりエラーが発生します。

プロパティ「prop」は、型「{}」の値に存在しません

TypeScript のオブジェクトに新しいプロパティを割り当てるにはどうすればよいですか?

4

25 に答える 25

103

または、一度にすべて:

  var obj:any = {}
  obj.prop = 5;
于 2012-10-03T15:51:04.087 に答える
40

コンパイラは不平を言いますが、必要に応じて出力する必要があります。ただし、これは機能します。

const s = {};
s['prop'] = true;
于 2012-10-03T14:57:43.397 に答える
28

そのためのもう 1 つのオプションは、コレクションとしてプロパティにアクセスすることです。

var obj = {};
obj['prop'] = "value";

于 2017-03-22T13:23:06.633 に答える
11

これを使用できます:

this.model = Object.assign(this.model, { newProp: 0 });
于 2019-07-09T20:53:42.147 に答える
8

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です。

于 2020-03-04T20:19:54.550 に答える
3

「any」に型キャストすることにより、あらゆる種類のオブジェクトに新しいプロパティを保存します。

var extend = <any>myObject;
extend.NewProperty = anotherObject;

後で、拡張オブジェクトを「any」にキャストすることで取得できます。

var extendedObject = <any>myObject;
var anotherObject = <AnotherObjectType>extendedObject.NewProperty;
于 2015-11-25T13:21:47.637 に答える
2

この宣言を追加して、警告を黙らせることができます。

declare var obj: any;
于 2012-10-03T15:02:17.000 に答える