// 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,编译器便检查出问题。
网友评论