如果想要覆盖 ts 的类型推断,那么可以使用类型断言,这好比告诉编译器:我知道自己在干什么!
但是类型断言是不安全的

非空断言

  1. let a: string;
  2. a!.slice(0);

类型断言的局限

类型断言要求两个类型 S 和 K(S 和 K 需要为父子集关系)
比如以下两个毫无关系的类型 string,number,断言会报错

  1. let str: string = '123'
  2. (str as number).toFixed(2); // 这里会有报错提示

正确的写法

  1. type S = {
  2. name: string;
  3. age: number;
  4. }
  5. type K = {
  6. name: string;
  7. }
  8. let s: S = {
  9. name: 'alex',
  10. age: 30
  11. };
  12. (s as K).name

双重断言

双重断言可以解决局限性,可是不建议使用

  1. let str: string = '123';
  2. (str as any as number).toFixed(2);

?? 操作符

?? 操作符在 js 中就适用,表示第一个为 null 或者 undeifned,则返回第二个,否则返回第一个

  1. null ?? 2