Typescript补充类型| 青训营笔记

54 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

typescript补充类型

图片.png

any和unkown:

  • any:
    • 表示任意类型,一个变量设置为any后相当于关闭了TS的类型检测。使用TS时,不建议使用any类型。
    • 声明变量不指定类型,则TS解析器会自动判断变量的类型为any(隐式any)
  • unknown :
    • unknown 实际上是一个类型安全的any;
    • unknown 类型的变量,不能直接赋值给其他变量

函数返回值类型void和never

  • void 用来表示空,函数无返回值;也是函数返回值默认类型。
  • never 表示永远不会返回结果;不能是任何值;空也不行

typescript泛型

在定义函数或类时,如果遇到类型不确定就可以使用泛型。函数返回值类型在执行时才能确定。

图片.png 图片.png

function fn<T>(a:T){
  return a;
}
// 可以直接调用具有泛型的函数
let result1 = fn(10);//不指定泛型,TS可以自动对类型进行推断
let result2 = fn<string>('hello');//指定泛型

function fn2<T,K>(a:T,b:K):T{
  console.log(b);
  return a;
}
fn2<number,string>(123,'hello');

interface Inter{
  length:number;
}
function fn3<T extends Inter>(a:T):number{
  return a.length;
}
fn3('123');

class MyClass<T>{
  name:T;
  constructor(name:T){
    this.name = name;
  }
}
const mc = new MyClass('xxx');

两个高级语法:

图片.png

类型别名&类型断言

图片.png

字符串/数字 字面量

图片.png

高级类型

联合/交叉类型

图片.png

  • 联合类型: IA|IB;表示一个值可以是几种类型之一
  • 交叉类型: IA&IB;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性

如上例子,bookList都有公共属性author ,我们可以将它这样封装 图片.png

类型保护与类型守卫

  • 访问联合类型时,出于程序安全,只能访问联合类型中的交集部分
    图片.png
  • 类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域 图片.png

但是在这些场景中,这样写是十分麻烦的,不过不用担心,typescript中有instance类型保护关键字,帮我们解决这个问题

图片.png 图片.png

工程应用

图片.png

浏览器并不是直接用typescript的代码,而是通过TSC编译后转换成js代码来运行。