在写单元测试中,我想抽象一个通用的函数,避免重复书写。函数的定义如下:
export function defineUnitTest<R> (
name: string,
fn: (...args: any) => R,
// 这里 source 参数的类型应该对应 fn 函数的参数类型
source: any,
expected: R,
) {
it(name, () => {
expect(fn(...source)).toEqual(expected);
});
}
declare function twoSum (nums: number[], target: number): number[];
// 使用这个函数时,第三个参数的类型应该是通过第二个参数推断出来的。
defineUnitTest("some desc", twoSum, [[2, 7, 11, 15], 9], [0, 1]);
但是我不知道如果建立 fn 函数参数的类型和 source 类型之间的联系。
请问要怎么写才可以让 source 的类型等于 fn 参数类型的数组?
ts只能做静态类型检查; 这里只能用泛型处理一下;