用途:该技能来自 marius-townhouse/effective-typescript-skills,针对「值类型未知」的场景,建议用 unknown 而非 any。核心规则是:当用 any 只是因为你不知道类型时,应改用 unknown。
主要能力与用法:unknown 是 any 的类型安全版本。任何值都可赋给 unknown,但 unknown 不能赋给其他类型,也不能直接调用方法或访问属性,必须先收窄类型。收窄方式包括类型断言(as)、instanceof、typeof 以及自定义类型守卫(value is T)。常见做法是把 JSON.parse 包成返回 unknown 的函数,再在验证后使用;API 响应、用户输入、外部数据源同样先声明为 unknown,验证后再访问。数组场景用 unknown[] 而非 any[]。文中还比较了 unknown、{}、object 的区别:unknown 包含所有值,{} 排除 null/undefined,object 排除原始类型。
适用场景:解析 JSON/YAML、处理外部来源数据、处理用户输入、编写接受任意值的函数、替换 any。
限制与说明:资料未提供安装命令、配置方式、代码示例之外的运行步骤或平台信息,暂未提供。该技能内容基于《Effective TypeScript》第 46 条。使用 unknown 会增加类型检查代码,但作者认为这些检查能捕获 any 会放过的错误;对外部来源不应假定可信。