typescript - 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?
解决方案
这在手册中有清楚的描述。比较两个函数:
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 的相关部分:为什么参数较少的函数可以分配给参数较多的函数?
推荐阅读
- permissions - SAP HANA 如何调试/修复“权限不足”错误
- c - 关于这个片段如何使用指针和引用来显示时间的困惑
- jquery - Datepicker - 将最大日期设置为从当前日期起 18 年前
- node.js - 谷歌云存储 - 权限不足
- javascript - 使用 jquery 在单击按钮时复制表或 div 内容
- vba - 检查单元格是否为空白,如果是,则填充它,然后将结果与旧值进行比较,如果不同,则使用 VBA 突出显示?
- powershell - Powershell Set-Content 在文件末尾创建新的空行
- mysql - 当匹配的数据在表中时,Join 返回 NULL
- php - PhpUnit 和 Laravel 5.4 如何在测试期间模拟 Session 数据
- python - 使用 Python 在 Pandas 中初始化训练集