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 校验。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏