typescript - 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]>
它是指传递的数组的第一个元素还是这里发生了什么?
有人可以帮我解释一下吗。
提前致谢。
解决方案
它是“查找类型”或“索引访问类型”。 是您在使用 type的键A[B]
索引到 type 的对象时获得的值的类型。当您使用数字键对类型对象进行索引时,您得到的也是如此。请注意,这种类型只有在已知具有数字索引签名的情况下才会编译......例如,如果是数组类型,那么就是数组元素的类型。 A
B
T[number]
T
T
T
T[number]
因此,T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>
这意味着“对于 的每个联合成员T
:如果它是数组类型,则生成BoxedArray
其元素类型的 a;否则,生成其中的 a BoxedValue
,并将它们全部连接到一个联合中”,如示例所示。
希望有帮助;祝你好运!
推荐阅读
- java - 在启动 Spring Boot 应用程序时刷新用户会话
- python - Python 3 - 如何创建允许用户在输入密码时同时输入字母和数字的代码
- node.js - 使用节点设置 Mac 终端
- javascript - 如何在微妙的slidershow.js中停止无限循环?
- python - Python手写文本提取
- r - 将多个分类列编码为R中的数字
- javascript - React useEffect useContext - 上下文适用于某些组件,但不适用于动态路由
- r - 当 selectize=F 时在 selectInput() 中选择多个选项
- c# - 从 PHP Web API 读取/加载 JSON 响应到 WPF ComboBox
- python - 如何在 for 循环中设置单选按钮