gpt4 book ai didi

TypeScript 推断数组 [index]

转载 作者:行者123 更新时间:2023-12-05 01:50:25 24 4
gpt4 key购买 nike

我预计结果number |从不[]。但实际上 number |从不[] |未定义

type T1 = (number | undefined)[]

const myFunc = (arr: T1, index: number) => {
const result = arr[index] === undefined ? [] : arr[index]
return result // number | never[] | undefined
}

为什么会这样?

最佳答案

TypeScript 使用流分析来缩小变量类型。但是,似乎无法仅通过检查其中一个元素是否未定义来缩小 arr 的范围:

type T1 = (number | undefined)[]
const myFunc = (arr: T1, index: number) => {
if (arr[index] === undefined) {
return []; // never[]
}
//the type of `arr` is still considered T1
let temp = arr[index]; //number | undefined
return temp;
}

实际上,我不确定 arr 的类型还应该如何表示为 if block 之后(您将如何表示“数字数组 |undefined ,除了这个特定的动态索引不是未定义的“?)。简单地回到 T1 仍然有一定意义。

您的代码使用了三元运算符,但它的行为与我上面的代码类似。

但是,当变量用于流控制语句中的直接比较时,TypeScript 可以缩小 result 变量的类型:

type T1 = (number | undefined)[]
const myFunc = (arr: T1, index: number) => {
const result = arr[index];
if (result === undefined) {
return []; // never[]
}
//the type of `result` is correctly determined as number, not undefined
return result;
}

我认为 arrresult(变量)可能通过控制流缩小了它们的类型,但是 arr[index](一个表达式,而不仅仅是一个变量)将仅根据 arrindex 的类型在此时计算。

关于TypeScript 推断数组 [index],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73135436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com