function f(): unknown {
return {abc: "ABC"};
}
const a = f();
if (a && a instanceof Object && a.hasOwnProperty("abc")) {
console.log(a.abc);
}
我有一个变量a
,它最初是unknown
类型(> = TypeScript 3.0)。
当abc
具有该属性时,我想在 if语句中使用a
的{{1}}属性。
但是,如上面的VS代码屏幕截图所示,即使我在if条件下检查了a
,TypeScript编译器也出现了TS2339
错误。
类型“对象”上不存在属性“ abc”。 ts(2339)
我知道我可以通过将a.hasOwnProperty("abc")
强制转换为a
类型来绕过此错误,但这会使编译器忽略成员名称的错字,并且如果有很多属性,那将是很糟糕的any
中的内容,并且与变量a
有关。
TypeScript编译器是否有办法知道a
具有某些属性?
答案 0 :(得分:1)
您可以使用{ [index: string]: unknown }
而不是unknown
来告诉TypeScript您的对象是未知属性的字典。
declare const unfamiliar: { [index: string]: unknown };
if ('foo' in unfamiliar) {
unfamiliar.foo;
}
答案 1 :(得分:0)
该错误来自a
是Object
的断言。 Object
类型不包含abc
,因此以下声明没有区别。
如果仅保留a.hasOwnProperty()
断言,则它应该起作用。