我在vscode中收到以下错误:
[ts] Property 'getPatientAllAddress' does not exist on type 'Object'.
为什么要检查动态添加的getPatientAllAddress()方法?
这通常不会发生在Javascript
中。
get addresses() {
if (this.data && this.data.hasOwnProperty("getPatientAllAddress")) {
return this.data.getPatientAllAddress();
}
}
如何压制/忽略此警告。
答案 0 :(得分:3)
到目前为止,this.data
的类型为Object
。发生此错误的原因是您尝试访问.getPatientAllAddress()
类型的变量上的Object
属性。即使你已经逻辑确认它应该具有该属性,但编译器还不够聪明,无法理解它应该在该变量的接口上使该属性可用。
解决方案1
如果您没有启用noImplicitAny
标记,则应该能够将最后一行更改为
return data['getPatientAllAddress']();
解决方案2
将this.data
的类型设置为:{getPatientAllAddress?:Function}
(或者在更好的世界中创建与包含该函数的this.data对应的接口)。
使用函数或适当的更具体的类型。
解决方案3
定义完整数据的界面
interface Bleh {
getPatientAllAddress : Function
}
和一名护卫
function isBleh(x:any) : x is Bleh {
return x && x.hasOwnProperty("getPatientAllAddress");
}
并用作
if (isBleh(this.data)) {
this.data.getPatientAllAddress();
}
解决方案1是最简单的,解决方案2是最正确的(虽然你也应该真正定义该界面中的所有其他内容,而不仅仅是这个可选功能),解决方案3是我展示语言功能的一半,并且半途而废在1和2不可行的情况下你需要做什么。