我有传统的JS,我正在移植到TS。
有许多实例创建了一个对象:
var myObj = {key0: 'data0', key1: 'data1'}
然后在以下位置动态地向此对象添加属性:
myObj.key2 = 'data2'
但是TS抱怨'{
>上没有属性'key2'解决此问题的正确方法是什么。我能做到
(myObj as any).key2
但这显然违背了使用TS的目的。
谢谢!
答案 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