Typescript 如何处理;“深”;嵌套联合类型

Typescript 如何处理;“深”;嵌套联合类型,typescript,Typescript,在下面的逻辑中,我试图键入作为balanceModel参数提供给函数的数据,但与深层嵌套模型有点不一致,如果有人能指出下面类型中的缺陷,我将非常感激。 下面是codesandbox中逻辑的一个实例: 如果我理解正确的话 const AMDR = DRI[DRIName] 可以是string | number | BalanceModelAMDRType 在mock部分中,您希望它是balancemodelmdrtype,在data中作为数字 如果您知道在那一刻它将始终是这些类型的,那么您可

在下面的逻辑中,我试图键入作为balanceModel参数提供给函数的数据,但与深层嵌套模型有点不一致,如果有人能指出下面类型中的缺陷,我将非常感激。

下面是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";
}