gpt4 book ai didi

TypeScript 分布式条件类型 - 附加类型参数约束

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:12 26 4
gpt4 key购买 nike

我正在尝试理解 TypeScript 2.8 中引入的条件类型并阅读以下官方文档。

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html

在分布式条件类型中,有一个例子

type BoxedValue<T> = { value: T };
type BoxedArray<T> = { array: T[] };
type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;

type T20 = Boxed<string>; // BoxedValue<string>;
type T21 = Boxed<number[]>; // BoxedArray<number>;
type T22 = Boxed<string | number[]>; // BoxedValue<string> | BoxedArray<number>;

上面的例子,我没看懂是什么意思 T[number]BoxedArray<T[number]>

它指的是传递的数组的第一个元素还是这里发生的事情?

谁能帮我解释一下。

提前致谢。

最佳答案

这是 lookup types 的(另一种)用法.基本上可以将 T[number] 视为任何数字索引可访问的任何元素的类型。

对于统一数组(每个元素都具有相同的类型),这与返回第一个元素的类型的 T[0] 相同。


然而,情况并非总是如此。那是因为 TypeScript 也有 tuples 的概念.

Tuple types allow you to express an array with a fixed number of elements whose types are known, but need not be the same.

假设我们有这个元组:

type Tuple = [string, number, string];

第一个和最后一个元素是string类型,但第二个是number。使用查找类型,我们可以访问不同的索引:

Tuple[0] // -> string
Tuple[1] // -> number
Tuple[2] // -> string

因此,如果我们在查找类型中使用 number,我们不会得到单个元素的类型,而是所有可能类型的联合:

Tuple[number] // -> string | number

关于TypeScript 分布式条件类型 - 附加类型参数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924650/

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