C++
中的Function Call Operator允许类像函数一样工作。我在类似这样的日志记录类中使用了它:
logger.setFileName("./debug.log");
logger.log("Log this message");
变成这样:
logger.setFileName("./debug.log");
logger("Log this message");
现在我想在type-script
中使用Function Call Operator或朝那个方向使用(为我的班级提供default-function
),但是我们如何在{ {1}}?
我们宁愿在GitHub发出功能请求吗?
答案 0 :(得分:3)
这应该是JavaScript proposal。
您不能制作像这样的JavaScript class
,但是您可以制作一个像这样的常规函数,尽管它需要一些技巧:
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");
编辑:这里的an example使用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