其他类型

2022-08-26  本文已影响0人  苍老师的眼泪
// void 表示没有返回值的函数的返回值类型
function f1(): void {
    console.log('hello');
}

// 任何不是基元的值
// string number bigint boolean symbol null undefined
function f2(): object {
    return {}
}

// unknown 类型代表未知类型,与 any 相反,对 unknown 值做任何事情都是不合法的

function f3(a: any) {
    a.b()   // 合法,可以通过编译
}

function f4(a: unknown) {
    a.b()   // 报错,a 的类型是未知的
}

function f5(s: string): unknown // 小心地对待返回值
{ 
    return JSON.parse(s)
}

// never 表示永远不会被观察到的值
function f6(): never {
    throw 'error'
}

function f7(a: boolean) {
    if (a) {
        return 1
    } else {
        return 0
    } else {
        return x    // never
    }
}

// never 类型可以分配给任意类型,但是没有任何类型可以分配给 never 类型,除了 never 本身以外
// 我们可以利用这一点做穷尽性检查:

type users = 'Edison' | 'Kingway' | 'asdf'

function greet(user: users) {
    switch(user) {
        case 'Edison':
            return 'Hello Edison';
        case 'Kingway':
            return 'Hi Kingway';
        default: 
            let _exhaustiveCheck: never = user
            return _exhaustiveCheck
    }
}
// 当 users 里面新增了 ’asfd‘ 是,就等于将 ’asdf‘ 分配给 never 类型的 _exhaustiveCheck,编译器便检查出问题。
上一篇下一篇

猜你喜欢

热点阅读