我有 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
确实应该是 Foo
、Foo2
或 Foo3
之一>).
最简单的解决方案是类型断言:
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/