Typescript推断变量类型类

时间:2018-11-28 21:20:52

标签: javascript typescript

我有3个界面:

export interface Foo {a:string}
export interface Foo2 extends Foo {b:boolean}
export interface Foo3 extends Foo {c:number}

我如何正确地分配课程?

class Goo {
  fooVar: Foo | Foo2 | Foo3;

  constructor() {
    this.fooVar.c = 0; <------ ERROR!
  }
}

欢迎所有帮助:)

1 个答案:

答案 0 :(得分:1)

有几种选择(如果fooVar实际上应该是FooFoo2Foo3中的一个)。

最简单的解决方案是类型断言:

  class Goo {
    fooVar: Foo | Foo2 | Foo3 = {
      a: ""
    };

    constructor() {
      (this.fooVar as Foo3).c = 0
    }
  }

如果c已经在fooVar中,并且您只想分配它已经存在(即fooVar已经Foo3),则可以使用{{1 }}类型防护:

in

如果您不介意更改对象引用,则可以使用spread:

  class Goo {
    fooVar: Foo | Foo2 | Foo3 = {
      a: "", c: -1
    };

    constructor() {
      if('c' in this.fooVar) this.fooVar.c = 0
    }
  }