【发布时间】:2026-01-08 00:45:02
【问题描述】:
这种用例的一个例子是:
type OnlyExtendArr = ???;
const arr1: OnlyExtendArr =
[
{}, //ok
{name: 'name'}, //ok
{name:"name",age: 'age'}, //ok
{age: 'age'} // should error - 'name' is required so this item's type would extend previous type
];
在这个例子中,我希望每个元素的类型都扩展前一个类型。
实际上,我想定义一个类型,索引n 中的项目应该扩展索引n-1 中的项目,但我不知道如何编写。
可以使用打字稿吗?
一个好的开始是提取数组中最后一个元素的类型,这似乎不是那么简单(因为你不能访问 typescript 中的 -1 元素)(这个here的解决方案)
数组中的最后一个元素:
type LengthOfTuple<T extends any[]> = T extends { length: infer L } ? L : never;
type DropFirstInTuple<T extends any[]> = ((...args: T) => any) extends (arg: any, ...rest: infer U) => any ? U : T;
type LastInTuple<T extends any[]> = T[LengthOfTuple<DropFirstInTuple<T>>];
type Stuff = [number, boolean, '10'];
type last = LastInTuple<Stuff> //'10'
【问题讨论】:
标签: typescript tuples type-inference variadic-tuple-types