是否可以在不使用函数重载的情况下,为Typescript中的函数编写类型感知声明,该声明接受元组并返回带有附加项的新元组?
简而言之,我需要表达如下功能:
[T1, T2, ... Tn] + U => [T1, T2, ... Tn, U]
与多次过载相比,有一种明显的方法:
function append<A, B>(a: [A], b: B): [A, B];
function append<A, B, C>(a: [A, B], c: C): [A, B, C];
function append<A, B, C, D>(a: [A, B, C], d: D): [A, B, C, D];
function append(tuple: any[], b: any): any[] {
return tuple.concat([b]);
}
有没有办法用的形式写这篇文章
function append<T extends any[], U>(t: T, u: U): ??? => ???;
我认为这确实超出了Typescript目前的理解范围。考虑完全没有声明返回类型的函数:
function append<U, T extends any[]>(u: U, ...t: T) {
return [u, ...t];
}
const a = append(4, 'a', 'b')
常数a
显然是[number, string, string]
类型,但3.7.2编译器认为它是any[]
。