TypeScript动态对象迁移

时间:2018-01-09 17:11:55

标签: typescript

我有传统的JS,我正在移植到TS。

有许多实例创建了一个对象:

var myObj = {key0: 'data0', key1: 'data1'}

然后在以下位置动态地向此对象添加属性:

myObj.key2 = 'data2'

但是TS抱怨'{

>上没有属性'key2'

解决此问题的正确方法是什么。我能做到

(myObj as any).key2 

但这显然违背了使用TS的目的。

谢谢!

2 个答案:

答案 0 :(得分:2)

也许使用索引签名:

var myObj: {[key: string]: string} = {key0: 'data0', key1: 'data1'}

myObj.foo = "bar"; // okay
myObj["bar"] = "foo"; // okay

了解索引签名here

答案 1 :(得分:2)

这实际上取决于,但在这种情况下,您可能想要定义一个类型:

interface KeyedObj {
  key0: string,
  key1: string,
  key2?: string,
}

const myObj: KeyedObj = {key0: 'data0', key1: 'data1'};
myObj.key2 = 'data2';

您也可以简单地将myObj声明为any

const myObj: any = ...
myObj.key2 = 'data2'; // no type issue here