输入'Type1 |类型2”不适用于类型“类型1”

时间:2018-09-25 11:10:13

标签: typescript typescript-typings

你好,我有这些类型的定义

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'.

关于我在做什么错的任何线索吗?

1 个答案:

答案 0 :(得分:4)

parameters可以是ICubeParamsISphereParams。当您将其分配给必须为params类型的ICubeParams时,打字稿编译器会抱怨无法验证该分配是否有效。也许parametersISphereParams,而您正在将其分配给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 */ 
}