TypeScript系列:类型断言

简介

类型断言本质就是替代编译器的类型推断,手动指定类型,让编译器按照你断言的类型进行后续的推断;简而言之,就是类型断言可以用来避免编译错误的;

上述说法与类型转换类似,但有着本质区别,类型断言是对于编译阶段而言的,告诉编译器如何分析代码,类型转换则是运行时发生的;

类型断言应该小心谨慎的使用,其并不能保证运行时的类型安全。如果执行类型断言后,实际的类型与预期类型不匹配,那么就会出现运行时错误。

类型断言并不能把某个值断言为任意类型,是存在一定的条件的:类型断言要求实际类型与断言类型兼容,实际类型可以断言为一个更加宽泛的类型(父类型),也可以断言为一个更加精确的类型(子类型),但不能断言为一个完全无关的类型。这是为了在进行类型断言时提供额外的安全性,完全毫无根据的断言是危险的;

当然如果你想断言成一个完全无关的类型,可以进行两次连续类型断言,先断言成 unknown 类型或 any 类型,然后再断言为目标类型。因为any类型和unknown类型是所有其他类型的父类型,所以可以作为两种完全无关的类型的中介。基本格式为 : expr as unknown as T

语法

类型断言有两种语法:

  •         语法一:<类型>值 (​前置形式)       

                <Type>value

  •         语法二:值 as 类型 (后置形式)

                value as Type

注意第一种语法跟 JSX存在冲突,故为了兼容性,推荐第二种;

例如:

const a = 'test';

const b: number = (<string>a).length;

const c: number = (a as string).length;

as const断言

as const断言作用是将字面量的类型断言为不可变类型,只能用于字面量,不能用于变量和表达式;

let a = 'test' as const;

a = 'abc'; // 报错

let b = 'qwerty';

let c = a as const; // 报错

非空断言

告知编译器,一个变量不会为 null 或 undefined,或者某个对象的某个key一定存在;

let a: number | null = null;

// 在某个时刻 a 被赋值为一个非 null 值

a = 10;

// 使用非空断言来确保 a 不是 null,将a! 类型缩窄为 number

let b: number = a!;  

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值