有没有办法定义元组的类型,以便按照下面代码示例中的注释中的描述推断类型?
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'???
}
不幸的答案是,在确定它是哪种类型之前,不要解构数组。
通过在确定实际使用的类型联合的哪一半之前进行解构,您会破坏两个元素及其对应类型之间的关系。使用 的初始类型[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] 删除。
我来说两句