跳到主要内容

类型断言

类型断言有哪两种语法?​

  • 作用: 手动告诉编译器"这个值按某类型处理", 编译器不做运行期检查;
  • 尖括号: <类型>值, 在 .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;
  • 效果: 可把任意类型断言为另一任意类型, 绕过"类型之间必须相关"的限制;
  • 风险: 完全跳过类型检查, 类型错误只能靠运行时暴露;