首页 > 解决方案 > Typescript - 具有通用道具类型的回调

问题描述

我有如下代码,myFunc需要callback哪个generic参数。

看起来我可以传递不需要任何参数并且没有收到任何错误通知的函数,知道为什么吗?

const myFunc = <T>(callback: (par: T) => void) => {
  const param = ('test' as any) as T;
  callback(param);
};

const callback = (par: number) => {
  console.log(par);
};

myFunc<string>(callback); // Not working as suspected - OK
myFunc<string>(() => {}); // Why I do not getting any error notification here?

标签: typescript

解决方案


这在手册中有清楚的描述。比较两个函数

let x = (a: number) => 0;
let y = (b: number, s: string) => 0;

y = x; // OK
x = y; // Error

您可能想知道为什么我们允许像示例 y = x 中那样“丢弃”参数。允许这种赋值的原因是忽略额外的函数参数实际上在 JavaScript 中很常见。例如,Array#forEach 为回调函数提供了三个参数:数组元素、其索引和包含数组。不过,提供只使用第一个参数的回调非常有用

另请参阅 TypeScript FAQ 的相关部分:为什么参数较少的函数可以分配给参数较多的函数?


推荐阅读