TS断言总结

109 阅读2分钟

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;
}

这时候就完成了一个赋值断言