代码之家  ›  专栏  ›  技术社区  ›  TSR

“A”B不存在属性“PROP”

  •  0
  • TSR  · 技术社区  · 7 年前

    我从一个url获取数据,如果满足某个条件,数据将加载到类型B或其超类a中。当数据加载到B中时,typescript无法识别其属性。

    类型“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()
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   TSR    7 年前

    这个错误是有道理的。你怎么能打电话 doB 如果var的定义类型 greeter 是 A B (和 一个 没有成员 doB()

    我想迎宾员是A型还是B型。那么为什么typescript不允许我调用B的方法呢?

    因为 迎宾员 一个 会破坏类型安全的 如果 开卷机允许了。

    A | B 只允许您访问两个都存在的属性。

        2
  •  3
  •   Agney Sidharth yadav    7 年前

    A|B ,这是一个 Union Type 在打字稿里。

    doA .

    但如果我们只能访问这些,那么类型就没有多大意义。要访问仅存在于其中一个实例上的属性,只需确保该属性具有正确的实例类型或Gaurd类型。在这种情况下,可以通过以下方法完成:

    let greeter: A|B  = new B("world");
    if(greeter instanceof B) {
        // Do just B things
    } else if(greeter instanceof A) {
       // Do only A things
    }