此类型声明中的{0:T}是什么意思?

时间:2020-02-11 10:43:58

标签: typescript

我在代码库中找到了这种类型声明,顾名思义,该声明涉及非空数组:

type NonEmptyArray<T> = T[] & { 0: T }

它可以按预期工作:

const okay: NonEmptyArray<number> = [1, 2];
const alsoOkay: NonEmptyArray<number> = [1];
const err: NonEmptyArray<number> = []; // error!

问题:

  • 1我无法理解0在这一部分{ 0: T }中的含义。你能解释一下吗?

  • 2替代声明有何不同?

type NonEmptyArray<T> = [T, ...T[]];

2 个答案:

答案 0 :(得分:4)

{ 0: T }中,0只是一个与数组第一个元素的索引匹配的键。由于在javascript数组中是对象的子类型,因此效果很好。我相信替代声明提供了相同的结果,但是更加简单易懂。 也许只是与旧版本的打字稿一起使用的代码,在元组中散布字体是相对较新的。

答案 1 :(得分:1)

它使用通用类型T和交集类型(由&表示-结果类型具有T[]的所有字段和类型文字{ 0: T}) ,基本上说这是T的数组,必须具有类型T的零索引值。在JavaScript中,数组是对象的子类型,其所有索引均为数字。因此,任何数组都可以以类似对象的方式访问其索引。