如何声明元组类型的联合,以便在解构后,变量的类型仍然保持关联

亚历山大·潘金

有没有办法定义元组的类型,以便按照下面代码示例中的注释中的描述推断类型?

declare const tuples: [number, null] | [null, number];

const [a, b] = tuples;

const fun = () => {
  if (a === null) {
    const c = b; // How to define type of 'tuples' so that 'c' infers as 'number'???

    return;
  }

  const d = b; // How to define type of 'tuples' so that 'd' infers as 'null'???
}

CRICE

不幸的答案是,在确定它是哪种类型之前,不要解构数组

通过在确定实际使用的类型联合的哪一半之前进行解构,您会破坏两个元素及其对应类型之间的关系。使用 的初始类型[number, null] | [null, number],如果您访问第一个元素而没有先检查它是两种数组类型中的哪一种,TypeScript 必须为值分配一个类型,该类型将匹配这两种数组类型,例如:number | null,关键的是,TypeScript 会考虑类型新变量a的类型与变量的类型无关b

解决方法是等待解构,直到检查完数组:

declare const tuples: [number, null] | [null, number];

const fun = () => {
  if (tuple[0] === null) {
    const [a, b] = tuples
    const c = b; // c has type number

    return;
  }

  const [a, b] = tuples
  const d = b; // d has type null
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型参数声明中的无形解构元组

Typescript抱怨数组解构后的变量类型

如何声明符合具有特定关联类型的协议的变量?

如何从联合声明新类型?

如何声明多态集合类型的标记联合

如何编写将元组数组转换为元组联合的类型

如何声明循环变量的类型

如何声明不是变量的类型

如何将元组的联合转换为对象类型

如何将元组类型转换为联合?

如何筛选父类型以便在TypeScript中选择给定类型的子代?

使用数据框后保持变量类型

如何访问在公共方法中声明的变量以便在私有方法中使用它

如何保存 CheckedTextView 复选框的状态,以便在退出后保持选中状态?

在解构的lambda参数上声明类型?

Typescript从元组/数组值派生联合类型

打字稿:元组到联合类型

如何获取CMakeLists.txt文件中的android构建类型(调试,发布)作为变量,以便在android studio中进行外部本机构建?

如何将联合类型保留在其他类型中而不是对其进行解构

如何声明类型的数组变量:Double / Cell

如何基于平台声明C ++变量类型?

Postgres:如何声明用户类型变量?

如何指定对象类型,以便在Python中运行代码之前对其进行识别?

如何声明两个数字的元组的返回类型?

为什么解构数组项会导致联合类型?

声明未知类型的变量

JS变量声明的类型

声明通用变量类型

如何声明扩展参数化类型的类型变量?