我的目标是创建一个函数,该函数克隆一个数组-并保留类型。使用此代码,打字稿将返回类型声明为任意:
export function someFn(inputArray) {
return [...inputArray];
}
// result will have any[] as type
const result = someFn([1, 2, 3]);
如何告诉打字稿,someFn
的返回类型将与输入相同(即,在这种情况下为数字数组)?
解决方法
我知道我可以使用类型变量来做到这一点:
export function someFn<T>(inputArray): T[] {
return [...inputArray];
}
// result will have number[] as type (but only because I input T as number)
const result = someFn<number>([1, 2, 3]);
我想避免上述解决方法,因为它迫使我事先声明类型。
答案 0 :(得分:3)
如果您将自变量键入取决于T
的任何内容(在下面的示例T[]
中),则将从该自变量推断出泛型,而无需在调用时指定它:>
function someFn<T>(inputArray: T[]): T[] {
return [...inputArray];
}
const result = someFn([1, 2, 3]); // `result` will be of type `number[]`
答案 1 :(得分:2)
即使您说不想使用泛型类型,这也是正确的答案。但是,您的声明并未充分利用它:
export function someFn<T>(inputArray: T[]): T[] {
return [...inputArray];
}
const numberResult: number[] = someFn([1, 2, 3]); //correct
const stringResult: string[] = someFn(["a", "b", "c"]); //correct
const mixedResult: string[] = someFn(["a", 2]); //error
如果您声明输出将是与输入相同类型的数组,则无需显式指定泛型类型参数。