unknown unknown 类型
最后更新:2026-10-22
unknown unknown 类型
unknown 是"安全的 any":任何值都能赋给它,但使用前必须先收窄或断言,否则编译器不放行。接收外部输入(API 响应、JSON.parse 结果)的首选类型。
| 分组 | 基础类型 |
|---|---|
| 类型 | 类型 |
| 严格模式 | 不需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
let value: unknown = JSON.parse(text);
if (typeof value === "string") {
value.trim(); // 收窄后才能调用方法
}
⚙️ 参数
| typeof x === "string" | typeof x === "string" 等判断把 unknown 收窄成具体类型 |
|---|
返回值:无返回值——unknown 是类型注解,不产生任何运行时代码。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
hi
2.5
unsupported
(转译后运行输出;未收窄就调用 value.trim() 会得到编译错误——这正是 unknown 的保护)
💡 要点
ℹ️ 说明 赋值方向是两者的核心差异:unknown 只能赋给 unknown/any;any 能赋给任何类型。所以 unknown 不会把不安全传播出去。
💡 提示 常用收窄手段:typeof(原始值)、instanceof(类实例)、in(属性存在)、数组 Array.isArray。
⚠️ 注意 收窄只证明"类型假设"成立,不校验数据内容;对外部 JSON 做结构校验应上 zod 这类 schema 库。
🏷️ 相关基础类型
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q unknown 和 any 应该选哪个?
A 默认选 unknown:它逼你先确认类型再用,错误在编译期暴露。any 只在快速原型或迁移旧代码时临时使用。
Q unknown 怎么变成具体类型?
A 两条路:收窄(typeof/instanceof/in,编译器自动跟踪)或类型断言 value as T(你向编译器打包票)。优先收窄,断言要少用。
Q JSON.parse 的返回值类型是什么?
A 标准库里签名是 any。稳妥做法是包一层:function safeParse(text: string): unknown { return JSON.parse(text); },再用 schema 校验。