特殊类型对比
void - 无返回值
function log(message: string): void {
console.log(message)
// 没有return语句,或return undefined
}
typescript
用于不需要返回值的函数,如事件处理、日志输出等。
never - 永远不会有值
// 总是抛出异常的函数
function throwError(msg: string): never {
throw new Error(msg)
}
// 无限循环
function infiniteLoop(): never {
while (true) {}
}
typescript
never类型的变量永远无法被赋值,常用于:
- 总是抛异常的函数
- 不可能到达的代码分支(类型守卫的穷尽检查)
any - 逃逸 hatch
let data: any = 'hello'
data = 42 // OK
data.foo() // OK(编译通过,运行时可能报错)
typescript
any关闭了类型检查,应尽量避免使用。仅在以下场景可接受:
- 快速原型开发
- 迁移JavaScript代码时的临时方案
- 确实无法确定类型的第三方库交互
unknown - 安全的any
let value: unknown = 'hello'
// 必须先进行类型检查才能使用
if (typeof value === 'string') {
console.log(value.toUpperCase()) // OK
}
value.toUpperCase() // 错误:Object is of type 'unknown'
typescript
unknown是类型安全版的any——可以接收任何值,但使用前必须进行类型检查。
类型对比表
| 类型 | 赋值 | 使用 | 场景 |
|---|---|---|---|
| void | undefined | 只读 | 函数无返回值 |
| never | 无法赋值 | 无法使用 | 异常函数、穷尽检查 |
| any | 任意值 | 任意操作 | 临时方案(尽量避免) |
| unknown | 任意值 | 需类型检查 | 安全的类型不确定值 |
↑