Typescript 如何处理;“深”;嵌套联合类型
在下面的逻辑中,我试图键入作为balanceModel参数提供给函数的数据,但与深层嵌套模型有点不一致,如果有人能指出下面类型中的缺陷,我将非常感激。Typescript 如何处理;“深”;嵌套联合类型,typescript,Typescript,在下面的逻辑中,我试图键入作为balanceModel参数提供给函数的数据,但与深层嵌套模型有点不一致,如果有人能指出下面类型中的缺陷,我将非常感激。 下面是codesandbox中逻辑的一个实例: 如果我理解正确的话 const AMDR = DRI[DRIName] 可以是string | number | BalanceModelAMDRType 在mock部分中,您希望它是balancemodelmdrtype,在data中作为数字 如果您知道在那一刻它将始终是这些类型的,那么您可
下面是codesandbox中逻辑的一个实例:
如果我理解正确的话
const AMDR = DRI[DRIName]
可以是string | number | BalanceModelAMDRType
在mock
部分中,您希望它是balancemodelmdrtype
,在data
中作为数字
如果您知道在那一刻它将始终是这些类型的,那么您可以添加as
在末尾键入“
,如
const AMDR = DRI[DRIName] as BalanceModelAMDRType; or
const AMDR = DRI[DRIName] as number;
如果您不知道在这些实例中,值将在这些类型中,则需要使用类型保护(if语句)
您可以向类型
(接口)添加属性,该属性也将标识该属性,如:
type BalanceModelAMDRType = {
type: "AMDR";
from: number;
to: number;
} & { [index: string]: number };
并具有类型保护功能:
function isBalanceModelAMDRType(v: any): v is BalanceModelAMDRType {
return "type" in v && v.type === "AMDR";
}
您的问题定义有点过于宽泛。您能否更具体地说明要修复的问题?在对错误进行初步检查后,您可能没有充分验证联合类型(使用),或者您的模型错误,并且与数据结构不匹配。(例如,数据部分似乎包含数字,而模拟部分似乎包含对象。您可能可以使用它)感谢您的建议ArtCarbody,typeguards确实需要用于此案例,非常感谢您共享有关泛型的链接:-)您使用的类型实际上是正确的,这个案例实际上需要使用类型保护:-)非常感谢您的帮助
type BalanceModelAMDRType = {
type: "AMDR";
from: number;
to: number;
} & { [index: string]: number };
function isBalanceModelAMDRType(v: any): v is BalanceModelAMDRType {
return "type" in v && v.type === "AMDR";
}