如何根据 Typescript 文档将可选参数传递给回调?
How to pass optional parameters to callback according to Typescript documentation?
我正在阅读 Typescript 文档的注意事项部分,其中有一个 don't about passing optional paramaters to a callback function。这是示例:
/* WRONG */
interface Fetcher {
getObject(done: (data: any, elapsedTime?: number) => void): void;
}
但我想知道如果我真的需要 elapsedTime 是可选的,如果不是通过使用 ?装饰师?
what if I really do need the elapsedTime to be optional,
如果你真的需要它,那就去做(使用?
)。但是您很可能不需要。相反,您更有可能误解了它会产生什么影响。将其设为可选意味着无法预测将传递给回调的内容。例如:
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');
});
我正在阅读 Typescript 文档的注意事项部分,其中有一个 don't about passing optional paramaters to a callback function。这是示例:
/* WRONG */
interface Fetcher {
getObject(done: (data: any, elapsedTime?: number) => void): void;
}
但我想知道如果我真的需要 elapsedTime 是可选的,如果不是通过使用 ?装饰师?
what if I really do need the elapsedTime to be optional,
如果你真的需要它,那就去做(使用?
)。但是您很可能不需要。相反,您更有可能误解了它会产生什么影响。将其设为可选意味着无法预测将传递给回调的内容。例如:
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');
});