我在Mantine documentation人中找到了这种类型的Tuple<string, 10>,但我不能理解它的概念.我在打字操场上测试了一下,它抛出了编译错误.

 // Object of arrays with 10 colors
  colors: Record<string, Tuple<string, 10>>;

enter image description here

当我查找TypeScript documentation的时候,没有关于第一个类型是数组中的项类型的解释,第二个数字表示数组中的项数.有人能跟我分享一下这个类型定义是如何工作的吗?

推荐答案

我在《曼汀Github repository》中看了一下.Tuple是如下定义的自定义类型:

type _TupleOf<
  T,
  N extends number,
  R extends unknown[]
> = R["length"] extends N ? R : _TupleOf<T, N, [T, ...R]>;

export type Tuple<T, N extends number> = N extends N
  ? number extends N
    ? T[]
    : _TupleOf<T, N, []>
  : never;

如您所见,我们在这里处理的是递归类型.从本质上讲,Tuple会产生类似于 struct struct 的固定长度array.Record<string, Tuple<string, 10>>将被推断为:

{
    [x: string]: [string, string, string, string, string, string, string, string, string, string];
}

Typescript相关问答推荐

如何使用属性作为具有Generics的TypScript类中的类型守护?

使用带有RxJS主题的服务在Angular中的组件之间传递数据

React router 6.22.3不只是在生产模式下显示,为什么?

TypeScript Page Routing在单击时不呈现子页面(React Router v6)

具有动态键的泛型类型

如何在Angular 12中创建DisplayBlock组件?

如何将CSV/TXT文件导入到服务中?

是否有一个版本的联合类型递归地使属性只出现在一个可选选项中?

如何使默认导出与CommonJS兼容

如何通过TypeScrip中的函数防止映射类型中未能通过复杂推理的any值

跟踪深度路径时按条件提取嵌套类型

专用路由组件不能从挂钩推断类型

有没有可能创建一种类型,强制在TypeScrip中返回`tyPeof`语句?

在Cypress中,您能找到表格中具有特定文本的第一行吗?

对有效枚举值的常量字符串进行常规判断

使用Type脚本更新对象属性

如何在Deno中获取Base64图像的宽/高?

如何在Reaction Native中关注屏幕时正确更新状态变量?

T的typeof键的Typescript定义

在对象类型的类型别名中,属性是用分号 (;) 还是逗号 (,) 分隔的?