Как объявить default-функцию для класса?
Оператор вызова функции в C++
позволяет классу действовать как функция. Я использовал его в классе журналирования, где-то вроде этого:
logger.setFileName("./debug.log");
logger.log("Log this message");
превращается в это:
logger.setFileName("./debug.log");
logger("Log this message");
И теперь я хотел бы использовать оператор вызова функции или что-то в этом направлении в type-script
(чтобы обеспечить default-function
для моего класса), но как мы можем добиться такой декларации в type-script
?
Должны ли мы сделать запрос на функцию на GitHub?
1 ответ
Это должно быть предложение JavaScript.
Вы не можете сделать 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");
Изменить: вот пример, который использует 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