学习TypeScrip12---never类型

76 阅读1分钟

TypeScript将使用 never 类型来表示不应该存在的状态(很抽象是不是)

// 返回never的函数必须存在无法达到的终点
// 因为必定抛出异常,所以error将不会有返回值
function error(message: string): never {
    throw new Error(message);
}

// 因为存在死循环,所以loop将不会有返回值
function loop(): never {
    while (true) {
    
    }
}

never 与 void 的差异

差异1:void类型只是没有返回值本身没错, never只会抛出异常没有返回值

// void类型只是没有返回值,但本身不会出错
function Void(): void {
    console.log();
}

// 只会抛出异常没有返回值
function Never(): never {
    throw new Error('aaa');
}

差异2: never处于最底层,在联合类型中会被直接移除

type A = void | number | never

never 类型的一个应用场景

type A = '12' | '23' | '34'

function isHe(value: A) {
    switch(value) {
        case '12':
            break
        case '23':
            break
        case '34':
            break
        default:
            // 用于场景兜底
            const error: never = value;
            return error
    }
}