未找到TypeScript属性错误:

时间:2017-01-02 08:34:37

标签: javascript angular typescript

我在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();
    }
}

如何压制/忽略此警告。

1 个答案:

答案 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不可行的情况下你需要做什么。