typescript - 如何根据 Typescript 文档将可选参数传递给回调?
问题描述
我正在阅读 Typescript 文档的注意事项部分,并且没有关于将可选参数传递给回调函数的注意事项。这是示例:
/* WRONG */
interface Fetcher {
getObject(done: (data: any, elapsedTime?: number) => void): void;
}
但是我想知道如果我真的需要 elapsedTime 是可选的,如果不是通过使用 ? 装饰师?
解决方案
如果我真的需要 elapsedTime 是可选的怎么办,
如果你真的需要它,那就去做(使用?
)。但你很可能不需要它。相反,您更有可能误解了它会产生什么影响。使其成为可选意味着将传递给回调的内容是不可预测的。例如:
const doRandomStuff = (callback: (elapsedTime?: number) => void) => {
const before = Date.now();
// do some stuff that takes time
if (Math.random() > 0.5) {
callback(Date.now() - before);
} else {
callback();
}
}
doRandomStuff((elapsed?: number) => {
if (typeof elapsed === 'number') {
console.log('elapsed', elapsed);
} else {
console.log('no elapsed time was received');
}
});
更有可能的是,您所追求的是“您可以根据需要使用经过的时间,或者不使用它”。但是强制参数已经是这种情况了,所以你不需要做任何事情来实现它。例如:
const doPredictableStuff = (callback: (elapsedTime: number) => void) => {
const before = Date.now();
// do some stuff that takes time
callback(Date.now() - before);
};
// This is legal
doPredictableStuff((elapsed) => {
console.log('elapsed', elapsed);
});
// And so is this
doPredictableStuff(() => {
console.log('done');
});
推荐阅读
- ruby - to_proc 的 ruby 和快捷方式似乎行为不规则
- ios - Fatal error: could not demangle keypath type
- c# - 如何从 C# 自定义 Excel 表格格式?
- laravel - Laravel - 2 divs by each other, one to the next row if not enough space
- post - 在 Flask 请求中获取和发布数据
- ios - 领域 - 对象已被删除或失效
- java - 使用 Siddhi 与 NATS 服务器的连接问题
- google-apps-script - 说明如何创建触发器(从下拉列表中选择一个值)以在 Google 表格中打开特定侧边栏的简单示例
- sql - Need Help for SQL MIN MAX Group By and AGGREGATE
- node.js - 具有身份验证(后端)的 asp.net 核心 webapi 和独立工作的具有身份验证的 redux 应用程序(前端)