Javascript语法无效的Typescript

时间:2018-02-09 13:50:00

标签: typescript

我觉得有点烦人的是,一些普通的javascript功能在typescript中语法上并不正确。

特别是在空对象中添加属性(如本例所示)是不可能的,因为Typescript假定空对象为Type {{}'而没有任何属性。

var a = {};

a.property = 1; // Error

要解决这个问题,我必须将空对象定义为可索引类型。

var b: { [x:string] : any} = {};

b.property = 1;

有解决方法吗?

2 个答案:

答案 0 :(得分:3)

语法上代码是正确的,从语义上讲它是不正确的。即使出现此错误,您仍然可以发出Javascript,默认情况下,如果您只有语义错误(不匹配的类型,额外的属性等),那么Typescript将会这样做

Typescript检查您是否与分配给对象的类型一致,并且类型是在第一次分配时确定的。

你可以做几件事之一,你已经发现的一件事,这允许你在对象上设置任何属性:

var b: { [x:string] : any} = {};

如果属性集已知,您可以显式声明属于对象的属性:

var b: { property?: string } = {};

或者,如果您根本不想打扰类型,可以使用any

var b: any = {};

当你放弃所有类型检查时,不推荐最后一个。第二个是最好的,您将所有属性限制为正确的类型,并确保不会向对象添加任何额外的属性。如果在运行时不知道对象的属性,那么第一个是好的。

如果多次重复使用相同类型,则可以使用界面:

interface TypeOfB { property?: string } 
var b: TypeOfB = {}

答案 1 :(得分:0)

您可以使用

var a = {};

a["property"] = 1; 

这样对TS和JS来说都是正确的