你好,我有这些类型的定义
export interface ICubeParams{
width:number,
depth:number,
height:number,
color?:string
}
export interface ISphereParams{
radius:number
color?:string
}
和类型为变量的
let parameters: ICubeParams | ISphereParams
然后,在另一个Cube类中,我将参数传递给构造函数(在这种情况下,参数的类型为ICubeParams)
const params: ICubeParams = this.parameters;
但是出现以下错误
Type 'ICubeParams | ISphereParams' is not assignable to type 'ICubeParams'.
关于我在做什么错的任何线索吗?
答案 0 :(得分:4)
parameters
可以是ICubeParams
或ISphereParams
。当您将其分配给必须为params
类型的ICubeParams
时,打字稿编译器会抱怨无法验证该分配是否有效。也许parameters
是ISphereParams
,而您正在将其分配给params
。
如果确定发生分配时,parameters
不会是ISphereParams
,则可以使用类型断言:
const params = this.parameters as ICubeParams ;
或者您可以使用类型保护来确保分配有效(并让打字稿知道执行检查的事实):
let parameters: ICubeParams | ISphereParams
//in type guard
if ('width' in parameters) {
const params: ICubeParams = parameters;
} else {
/* Now what ? Handle unexpected case or ignore it, up to you */
}