【发布时间】:2021-06-01 19:59:21
【问题描述】:
使用...args: unknown[] 将泛型参数指定为函数不能很好地发挥作用吗?
// Using TS 4.2.3
const fn = (foo: boolean) => 'hello'
// Ideally, one generic function arg
type Data1<M extends (...args: unknown[]) => unknown> = {
fn: M
}
const data1: Data1<typeof fn> = {
^^^^^^^^^
fn,
}
Type '(foo: boolean) => string' does not satisfy the constraint '(...args: unknown[]) => unknown'.
Types of parameters 'foo' and 'args' are incompatible.
Type 'unknown' is not assignable to type 'boolean'.
这个TypeScript Playground 示例还演示了将函数拆分为两个通用参数,这可行,但从API 的角度来看并不好。我希望能更好地理解为什么一个有效,而另一个无效。
【问题讨论】:
-
M extends Function? -
@jonrsharpe 是的,那行得通。我猜它相当于
M extends (...args: any[]) => any。仍然对它为什么不喜欢...args: unknown[]感兴趣 ????。
标签: typescript typescript-generics