首页 > 解决方案 > 类型 'A | 上不存在属性 'prop' 乙'

问题描述

我正在从 url 获取数据,如果满足某个条件,数据将加载到类型 B 或其超类 A 中。当数据加载到 B 中时,打字稿无法识别其属性。我收到以下代码错误:

类型“A”上不存在属性“doB”

class A {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    doA() {
        return "Hello, " + this.greeting;
    }
}
class B  extends A{
    greeting: string;
    constructor(message: string) {
        super(message)
        this.greeting = message;
    }
    doB() {
        return "Hello, " + this.greeting;
    }
}

let greeter: A|B  = new B("world");
greeter.doB()

标签: javascriptnode.jstypescript

解决方案


这个错误是有道理的。doB如果 var 的定义类型greeterA or B (并且A没有定义成员),您如何确定地调用doB()

Greeter 是假设的 A 或 BI 类型。那么为什么打字稿不允许我调用 B 的方法?

因为如果转译器确实允许,它greeter也可能是一个A会破坏类型安全的实例。

具有A | Bonly 类型允许您访问两者上都存在的属性。


推荐阅读