我有遗留的JS,我正在移植到TS。
创建对象的实例有很多:
var myObj = {key0: 'data0', key1: 'data1'}
,然后稍后动态地向此对象添加属性:
myObj.key2 = 'data2'
但是,TS 抱怨属性"key2"在"{
解决此问题的正确方法是什么。我能做到
(myObj as any).key2
但这显然违背了使用 TS 的目的。
谢谢!
这确实取决于,但在这种情况下,您可能希望定义一个类型:
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
也许使用索引签名:
var myObj: {[key: string]: string} = {key0: 'data0', key1: 'data1'}
myObj.foo = "bar"; // okay
myObj["bar"] = "foo"; // okay
在此处阅读有关索引签名的信息。