我在代码库中找到了这种类型声明,顾名思义,该声明涉及非空数组:
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[]];
答案 0 :(得分:4)
在{ 0: T }
中,0
只是一个与数组第一个元素的索引匹配的键。由于在javascript数组中是对象的子类型,因此效果很好。我相信替代声明提供了相同的结果,但是更加简单易懂。
也许只是与旧版本的打字稿一起使用的代码,在元组中散布字体是相对较新的。
答案 1 :(得分:1)
它使用通用类型T
和交集类型(由&
表示-结果类型具有T[]
的所有字段和类型文字{ 0: T}
) ,基本上说这是T
的数组,必须具有类型T
的零索引值。在JavaScript中,数组是对象的子类型,其所有索引均为数字。因此,任何数组都可以以类似对象的方式访问其索引。