Typescript入门|青训营笔记

38 阅读3分钟

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

为什么什么是Typescript?

Typescript是静态类型、弱类型的语言。

动态类型

在代码执行时才会进行类型匹配。

静态类型

在编译阶段就能确定每个变量的类型。

好处

  • 可读性强:基于语法解析TSDoc,ide增强
  • 可维护性增强:在编译阶段暴露大部分错误。
  • 多人合作的大型项目中,获得更好的稳定性和开发效率

JS的超集

  • 包含于兼容所有Js特性,支持共存
  • 支持渐进式引入与升级

基本语法

基础数据类型

string、number、boolean、null、undifined

对象类型

  • 只读属性:关键字readonly加在属性名前面,约束属性不可在对象初始化外赋值
  • 可选属性:“?”加在属性名与“:”之间,定义该属性可以不存在
  • 任意属性:any,约束所有对象属性都必须是该属性的子类型 类型:书写建议I开头表示这是一个类型。

函数类型

ts写法1:

function fn(x:number(参数类型),y:number(参数类型)):number(返回值类型){ return x*y } const fn:(x:参数类型,y:参数类型)=>返回值类型=(x,y)=>x*y

ts写法2:

interface IMult{ (x:number(参数类型),y:number(参数类型)):number(返回值类型); } const mult:IMult = (x,y)=>x*y

函数重载

在同一个作用域内,有多个函数名相同,但形参列表不同,返回值无关。

数组类型

表示方法

  • 类型+方括号:type arr1 = number[]
  • 泛型表示:type arr2 = Array<number|string|Record<string,number>>
  • 元组表示:type arr3 = [number,number,string,string]
  • 接口表示:type arr4 = interface IArr4{[key:number]:any;}

补充类型

  • 空类型(void):表示无赋值
  • 任意类型(any):是所有类型的子类型
  • 枚举类型(enum):支持枚举值到枚举名的正、反向映射
  • 泛型: 不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

泛型约束(extends)

例:限制泛型必须符合字符串 type arr = <T extends string>(target:T)=>T[]; 关键字extends跟随泛型出现时,表示类型推断,其表达可类比三元表达式

泛型参数默认类型

例:type arr<T=string>=(target:T)=>T[]

类型别名

type关键字定义别名类型

类型断言

as关键字,断言变量是否为正确类型

高级类型

联合/交叉类型

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

类型保护与类型守卫

类型保护

访问联合类型时,出于程序安全,仅能访问联合类型中交集部分。

类型守卫

定义一个函数,他的返回值是一个类型谓词,生效范围为子作用域。