我有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!
}
}
欢迎所有帮助:)
答案 0 :(得分:1)
有几种选择(如果fooVar
实际上应该是Foo
,Foo2
或Foo3
中的一个)。
最简单的解决方案是类型断言:
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
}
}