首页 > 解决方案 > TypeScript 分布式条件类型 - 附加类型参数约束

问题描述

我正在尝试了解 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] in 的含义BoxedArray<T[number]>

它是指传递的数组的第一个元素还是这里发生了什么?

有人可以帮我解释一下吗。

提前致谢。

标签: typescripttypescript2.0typescript-generics

解决方案


它是“查找类型”或“索引访问类型”。 是您在使用 type的键A[B]索引到 type 的对象时获得的值的类型。当您使用数字键对类型对象进行索引时,您得到的也是如此。请注意,这种类型只有在已知具有数字索引签名的情况下才会编译......例如,如果是数组类型,那么就是数组元素的类型。 ABT[number]TTTT[number]

因此,T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>这意味着“对于 的每个联合成员T:如果它是数组类型,则生成BoxedArray其元素类型的 a;否则,生成其中的 a BoxedValue,并将它们全部连接到一个联合中”,如示例所示。

希望有帮助;祝你好运!


推荐阅读