TypeScript | 青训营笔记

61 阅读2分钟

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

重点内容

  • 发展史
  • 基本语法

发展史

为什么需要TS?

众所周知,JS是弱类型的动态语言。 而TS则是强类型的静态语言。 相比于TS,它的特点是:

  • 可读性增强
  • 可维护性增强

TS是JS的超集,包含兼容JS的所有特性,支持渐进式引入和升级。

基本语法

给变量定义类型。

基本类型

const q: string = 'string';

Interface

/只读属性:约束属性不可在对象初始化外赋值/

/可选属性:定义该属性可以不存在/

/任意属性:约束所有对象属性都必须是该属性的子类型/

函数类型

const result:(x:number, y: number) => number = (x,y) => x*y;

函数重载

函数重载既是在interface写多条类型。

数组类型

数组类型可以用多种方式表达。

第一种: [类型+方括号] 表示

第二种: 泛型表示

第三种: 元组表示

第四种: 接口表示

这四种方式没有好坏之分,实际使用都可以。

泛型

泛型是不预先指定具体的类型,而是在使用的时候再指定类型的一种特性。常用符号T表示。

可以对泛型做一些限制。

比如,后接extends+类型,就是限制了泛型只能为该类型,其他类型不行。

也可以指定泛型的默认参数,用=号连接。

类型别名 & 类型断言

通过type关键字定义了IObjArr的别名类型。

通过as关键字,断言result类型为正确类型。

ts也支持 允许指定字符串/数字必须的固定值。

高级类型

联合类型与交叉类型

联合类型: IA | IB;

交叉类型: IA & IB;

类型保护

可以直接通过.type然后拿到某个变量的类型,可用于后续变量类型的判断,达到类型保护的作用。

补充类型

  • 空类型,表示无赋值
  • 任意类型,是所有类型的子类型
  • 枚举类型:支持枚举值到枚举名的正、反向映射

继承

通过extends关键字继承其他类型。

实践

interface IBytedancer {
    readonly jobId: number;
    name: string;
    sex: 'man' | 'woman' | 'other';
    age: number;
    hobby?: string;
    [key: string]: any;
}

参考

‌⁢‌​‍‌⁢​​⁤‌‍​⁣⁤​⁡⁣‍⁤⁣​‌‬‌‬‍⁡​⁤‍⁣‬⁣‌​​⁡‌⁢​⁤​⁤TypeScript入门.pptx - 飞书云文档 (feishu.cn)