any、unknown、never、void 各自的语义和适用场景?
| 类型 | 含义 | 场景 |
|---|---|---|
any |
关闭类型检查,可做任何操作 | 迁移旧代码、确实未知时(尽量少用) |
unknown |
类型未知但安全:使用前必须收窄 | 替代 any,接收任意输入(如 JSON.parse 返回值) |
never |
永不出现的值 | 函数抛出异常/死循环;穷尽检查(exhaustive) |
void |
函数无返回值 | 回调/事件处理函数返回占位 |
const data: unknown = JSON.parse(raw)
if (typeof data === 'object') { /* 收窄后才可用 */ }
function fail(msg: string): never { throw new Error(msg) }
// 穷尽检查
function assertNever(x: never): never { throw new Error('unexpected ' + x) }
unknown是更安全的any:禁止未检查就操作。