TS断言总结
我们写代码时明明比编译器还要明白某个变量的值,但他还是报错,额,这时候你就要告诉编译器:"嘿!相信我,我知道我在干什么!" 类型断言不会在执行的时候发生作用,它只会在编译的时候发挥它的作用,因为TS是一门先编译在执行的语言,而JS是一边解释一边执行
换句话说类型断言只是告诉编译器这个变量是什么类型,让他别报错了!只在编译时起作用不会影响执行
共有三种断言
类型断言
尖括号语法
语法:<类型>变量名
如
let str: any = "this is a string";
let len: number = (<string>str).length;
as 语法
语法:变量名 as 类型
let str: any = "this is a string";
let len: number = (str as string).length;
非空断言
因为有时候编译器并不知道你这类型会不会是undefined或者是null所以报错,但是你又很明确这值不会为空,这时候你就要告诉它,"嘿!相信我,我确信这个值不为空!"
比如下图,类型检查器就会报错


但是加上 ! 后,就相当于告诉编译器我确保它不会为空,报错会解除
function myfunc(maybeString: string | undefined | null) {
const value: string = maybeString!;
console.log(typeof value);
}
这就是非空断言
确定赋值断言
就是当你使用了一个没有明确的静态赋值前,ts的编译器就会报错,上你这个没有赋值不能够拿来做加减乘除
如下
let num: number;
initialize();
console.log(2 * num); // Error
function initialize() {
num = 10;
}
但我们在num定义时的后面加上 ! 可以告诉编译器:在做运算时它是没问题的,它会被赋值的!
改成
let num!: number;
initialize();
console.log(2 * num); // Error
function initialize() {
num = 10;
}
这时候就完成了一个赋值断言