这需要一个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