访问对象文字的属性时出现TypeScript错误

时间:2016-09-16 04:10:49

标签: typescript object-literal

我是TypeScript的初学者。 访问Object的数据时,我遇到了一些问题。

let content:Array<string> = ["I", "am", "a", "beginner"]
let data:Object = {a: "foo", b: content}
console.log(data.a);
console.log(data['b']);
console.log(data.b);

此代码在第5行会有错误。(JavaScript中没有错误) 请给我解释一下。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

只需将data的显式声明删除为Object,以便TypeScript推断出类型,即将其更改为此类

let content:Array<string> = ["I", "am", "a", "beginner"]
let data = {a: "foo", b: content}
console.log(data.a);
console.log(data['b']);
console.log(data.b);

您的初始代码中出错的原因是因为您告诉TypeScript编译器data类型为Object或任何派生类,因为类型Object具有没有属性ab这会导致错误。

请注意,删除显式类型注释与使用AD.Net建议的any不同,因为在这种情况下,TypeScript仍然具有所有可用的类型信息 - 只是推断(参见屏幕截图Visual Studio Code),而通过使用any,您告诉TypeScript编译器该变量可以引用任何不会导致类型检查的内容。

enter image description here

答案 1 :(得分:0)

您可以指定data:any,至少您不会收到任何错误。如果您想要智能感知,则需要为type/interface创建data,例如

interface myData{
    a:string;
    b:Array<String>
}
data:myData
然后你可以有intellisense。