如何根据 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');
});