【发布时间】:2019-12-19 21:10:35
【问题描述】:
我有以下课程:
const LOG_LEVELS = ['error', 'warn', 'info', 'debug'];
class Logger {
log (level, message) {
// some code for logging
}
}
for (const LEVEL of LOG_LEVELS) {
Logger.prototype[LEVEL] = function(message) {
this.log(LEVEL, message);
}
}
我想用打字稿在代码上方输入提示。
我尝试了以下方法:
const LOG_LEVELS = ['error', 'warn', 'info', 'debug'];
class Logger {
public [key in LOG_LEVELS]: (message: string) => void;
public log (level: string, message: string): void {
// some code for logging
}
}
for (const LEVEL of LOG_LEVELS) {
Logger.prototype[LEVEL] = function (message: string): void {
this.log(LEVEL, message);
};
}
但我在类定义中得到“类属性声明中的计算属性名称必须引用其类型为文字类型或‘唯一符号’类型的表达式”,并且“元素隐含地具有‘任何’类型,因为表达式'string' 类型的不能用于在原型扩展上索引类型'Logger'”。
键入提示动态添加的类方法的正确方法是什么?是否可以在不显式定义所有日志级别方法的情况下实现类型提示?
我正在使用打字稿 3.5.3。
【问题讨论】:
标签: typescript