TS2339:类型“对象”上不存在属性“名称”

时间:2019-04-24 16:02:33

标签: typescript

我正在用打字稿写一个对象,代码是:

const obj2 ={name:1}
obj2.name = 2;
console.log(obj2.name)
const obj3:object = {name: "wewda"}
obj3.name = 'dadsa';
obj3['name'] = "cxzcxz"
console.log(typeof obj2)
console.log(obj3)
console.log(typeof obj3)

第5行出现错误:错误TS2339:类型“对象”上不存在属性“名称”。 但是如果我改用obj3['name'] = "cxzcxz", 它有效,有人可以解释吗?谢谢

1 个答案:

答案 0 :(得分:3)

看这行:

if

您已明确声明const obj3:object = {name: "wewda"}; 的类型为obj3,有效地丢弃了有关对象可以包含哪些属性的任何信息。顺便说一下,类型object是代表非基本类型的类型,即不是objectnumberstring,{{1} },booleansymbol

因此,类型系统无法验证null是否有效。但是,如果您使用默认的编译器选项(相当宽松)运行,则将允许使用undefined,因为obj3.name将隐式转换为obj3['name'],即使原则上是一样的不安全。我通常建议您启用obj3编译器选项,以防止这种不安全的访问。

还请注意,这是您键入时的编译时错误,而不是运行时错误。换句话说,any value 仍然具有属性--noImplicitAny,但 type obj3却没有。