Typescript: 使用联合类型时 ES6 getter 属性不存在

创建于 2016-06-09  ·  1评论  ·  资料来源: microsoft/TypeScript

打字稿版本:

每晚(1.9.0-dev.20160217)

代码

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    example.foo; // error TS2339: Property 'foo' does not exist on type 'Example | Object'.
  }
}

预期行为:

example.foo不会在任一方法中引发错误。

实际行为:

example.fooexampleExample | Object抛出:

error TS2339: Property 'foo' does not exist on type 'Example | Object'.
Question

最有用的评论

这是 TypeScript 的正常行为,因为它可以保护您免受可能没有.foo东西的侵害。

如果你想让它工作,你需要将类型缩小到包含.foo

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}

>所有评论

这是 TypeScript 的正常行为,因为它可以保护您免受可能没有.foo东西的侵害。

如果你想让它工作,你需要将类型缩小到包含.foo

class Example {
  get foo() {
    return true;
  }

  baz(example: Example) {
    example.foo;
  }

  bar(example: Example | Object) {
    if (example instanceof Example) {
      example.foo;
    }
  }
}
此页面是否有帮助?
0 / 5 - 0 等级