0

C++ 中的函数调用运算符允许类像函数一样工作。我在一个日志类中使用了它,如下所示:

logger.setFileName("./debug.log");
logger.log("Log this message");

变成这样:

logger.setFileName("./debug.log");
logger("Log this message");

现在我想在类型脚本中使用函数调用运算符或那个方向的东西(为我的类提供默认函数),但是我们如何在类型脚本中实现这样的声明?

我们是否应该在GitHub 上提出功能请求?

4

1 回答 1

3

这需要一个JavaScript 提案

你不能创建一个class像这样行为的 JavaScript,但是你可以创建一个像这样行为的常规函数​​,尽管它需要一些体操:

interface Logger {
  (message: string): void;
  setFileName(filename: string): void;
}

const logger = function (message: string) {

} as Logger;

logger.setFileName = function (filename: string) {

}

logger.setFileName("./debug.log");
logger("Log this message");

编辑:这是一个使用createLogger()工厂函数创建多个实例的示例,其状态存储在函数范围内:

interface Logger {
  (message: string): void;
  setFileName(filename: string): void;
}

const createLogger = (): Logger => {
  let _filename: string;
  const logger = function (message: string) {
    console.log(_filename, message);
  } as Logger;

  logger.setFileName = function (filename: string) {
    _filename = filename;
  }

  return logger;
}

const logger1 = createLogger();
const logger2 = createLogger();
logger1.setFileName("./debug1.log");
logger2.setFileName("./debug2.log");
logger1("one");
logger2("two");

// Output:
// ./debug1.log one
// ./debug2.log two
于 2019-05-14T05:26:50.420 回答