打字稿动态对象迁移



我有遗留的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

在此处阅读有关索引签名的信息。

最新更新