在下面简化的我的问题的示例中:
const factory = <T extends unknown[]>(
fn: (...args: T) => void
) => {
const transformedFn = (...args: T) => {
console.log('called with', ...args)
return fn(...args)
}
// init
transformedFn() // TypeScript error here
return transformedFn
}
// usage:
const fn = (num?: number, str?: string) => {
return JSON.stringify({ num, str })
}
factory(fn)()
我收到 TypeScript 错误:
类型“[]”的参数不能分配给类型“T”的参数。“[]”可以分配给类型“T”的约束,但“T”可以用约束“unknown[]”的不同子类型来实例化。
令人困惑的是,这是有效的:
const fn = <T extends unknown[]>(...args: T) => {
return args
}
fn()
我如何才能让 TypeScript 相信T
在两种情况下它是相同的?