我有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!
}
}
欢迎所有帮助:)
最佳答案
有多个选项(如果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 }
}
}