类型断言
类型断言有哪两种语法?
- 作用: 手动告诉编译器"这个值按某类型处理", 编译器不做运行期检查;
- 尖括号:
<类型>值, 在.tsx中与 JSX 语法冲突; - as:
值 as 类型, 推荐写法;
interface Cat {
name: string;
}
declare function getCacheData(key: string): any;
const tom1 = getCacheData("tom") as Cat;
const tom2 = <Cat>getCacheData("tom");
什么情况下需要断言?
- 收窄宽类型: 从
any、unknown或联合类型取出更具体的类型; - 断言失败: 断言只是编译期约定, 与真实值不符时错误推迟到运行时, 见 any、unknown、never;
什么是双重断言, 为什么不建议使用?
- 写法: 先断言为
any, 再断言为目标类型;
const value = source as any as Target;
- 效果: 可把任意类型断言为另一任意类型, 绕过"类型之间必须相关"的限制;
- 风险: 完全跳过类型检查, 类型错误只能靠运行时暴露;