javascript - typescript 推断变量类型类

标签 javascript typescript

我有 3 个接口(interface):

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

如何正确分配类(class)?

class Goo {
  fooVar: Foo | Foo2 | Foo3;

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

欢迎所有帮助:)

最佳答案

有几个选项(如果 fooVar 确实应该是 FooFoo2Foo3 之一>).

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

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

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

如果 c 已经在 fooVar 中并且你只想在它已经存在时分配它(即 fooVar 已经是 Foo3 ) 你可以使用 in 类型的保护:

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

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

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

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

    constructor() {
      this.fooVar = {...this.fooVar, c: 0 }
    }
  }

关于javascript - typescript 推断变量类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53528286/

相关文章:

reactjs - 类型 Check help on Object with string index

javascript - 使用 exec() 匹配字符串

javascript - 如何检测 "search"HTML5 输入的清除?

javascript - 使用 jQuery 搜索 .text() 和 data- 属性

javascript - 将 Typescript 类导入 Jasmine 测试(<type> 不是构造函数错误)

javascript - Typescript 找不到导入的模块

javascript - 作为函数且具有 namespace 的模块的 typescript 定义?

javascript - 需要使用变量更改 JSON 属性

javascript - 通过 Javascript 中的任何字段提取条目

typescript - 过滤通用类型