变量“ x”在分配前使用

时间:2019-06-24 08:46:51

标签: typescript

我在Logger类中获得了以下静态方法。我完全不了解tsserver错误。

LogLevel

const enum LogLevel {
    ERROR = 0,
    WARN = 1
}

export default LogLevel;

记录器

    static defaultHandler(level: LogLevel, ...message: readonly string[]) {
        if (!Logger.isLevelEnabled(level)) return;

        let handler: Function;
        switch (level) {
            case LogLevel.ERROR:
                handler = console.error;
                break;

            case LogLevel.WARN:
                handler = console.warn;
                break;
        }

        // [tsserver 2454] Variable 'handler' is used before being assigned
        handler(...message);
    }

由于LogLevel是一个枚举,因此永远不会取消分配处理程序。如果我添加iftslint对此表示抱怨。

        // [tslint 1] expression is always true (strict-type-predicates)
        if (handler !== undefined) handler(...message);

我甚至删除了no-let tslint规则,因为它出于某种原因在switch案例中看不到分配,并且希望我使用const handler: Function;。谁能解释这是怎么回事。

1 个答案:

答案 0 :(得分:3)

您有

let handler: Function;
switch (level) {
    case LogLevel.ERROR:
        handler = console.error;
        break;

    case LogLevel.WARN:
        handler = console.warn;
        break;
}

您仅处理ERRORWARN。选项更多:

ERROR = 0,
WARN = 1,
INFO = 2,
DEBUG = 3,
VERBOSE = 4

修复

添加默认设置以适应剩余情况:

    let handler: Function;
    switch (level) {
        case LogLevel.ERROR:
            handler = console.error;
            break;

        case LogLevel.WARN:
            handler = console.warn;
            break;

        default: 
            handler = console.log;
            break;
    }