我正在使用typescript 3.0中的新功能(我使用的是3.1.0-dev.20180717),发现了泛型类型的奇怪行为。
type Head<T extends any[]> = T[0];
type Tail<T extends any[]> = ((...t: T) => 0) extends ((a: any, ...r: infer R) => 0) ? R : never;
type Prepend<A extends any, B extends any[]> = ((a: A, ...r: B) => 0) extends ((...r: infer T) => 0) ? T : never;
type Combine<T extends any[]> = Prepend<Head<T>, Tail<T>>
type test1 = Head<[1, 2, 3, 4]>; // 1 âï¸
type test2 = Tail<[1, 2, 3, 4]>; // [2, 3, 4] âï¸
type test3 = Prepend<1, [2, 3, 4]>; // [1, 2, 3, 4] âï¸
type test4 = Prepend<Head<[1, 2, 3, 4]>, Tail<[1, 2, 3, 4]>> // [1, 2, 3, 4] âï¸
type test5 = Combine<[1, 2, 3, 4]>; // [1, ...any[]] â
我在等,那
test5
将具有类型
[1, 2, 3, 4]
因为它和
test4
但包裹在
Combine<T>
泛型类型。我错过什么了吗?