TypeScript简介 | 青训营笔记

131 阅读2分钟

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

TypeScript

TS vs JS

相比于JS,TypeScript有以下优点:

静态类型

JS饱受诟病的一点便是弱变量类型,而TS是一门静态类型的语言。

  • 可读性增强:基于语法解析TSDoc,IDE增强
  • 可维护性增强:在编译阶段暴露大部分错误

因此,在多人合作的大型项目中,使用TS,可以获得更好的稳定性和开发效率。

JS的超集

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

从“JS的超集”这一特点来说,TS之于JS就好比C++之于C(当然,这好像是一种不太负责任的说法,C语言在一众编程语言中,具有举足轻重的地位)。

数据类型

基础数据类型

JS里的基础数据类型(ES6之前)有5种:stringnumberbooleannullundefined,TS也是如此。在使用let或者const声明变量时,可以给变量名后加:变量类型

对象类型

可以使用鸭子类型(Duck Typing)对变量加以约束。

If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

这段话是「鸭子类型」的命名由来。先不论其在逻辑上的正确性,鸭子类型其实是「结构化类型」的一种十分形象的称呼,结构化地声明对象就变成一种类型「填鸭」的过程。

interface Duck {
    name?: string;
    sex: "male" | "female" | "other";
}

我们规定了一只「鸭子」该有的「美德」,于是能被称作「鸭子」的便应具有这种「美德」,否则其不配为「鸭子」。

函数类型

可以规定函数的参数类型返回值类型。如:

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

其中(x: number, Y: number) => number便是对函数类型的约束。

函数重载

对于不同的参数类型,可以返回不同类型的值。

注:各个重载方法(构造函数)的参数类型列表不能重复。

数组类型

数组有不同的表示方法:

  • 类型+方括号表示
  • 泛型表示
  • 元组表示
  • 接口表示

TypeScript补充类型

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

类型别名

使用type typeAlias typeSrc来为typeSrc设置一个别名typeAlias,类似于C语言里的typedef关键字。

类型断言

使用as关键字进行类型断言。

字符串/数字 字面量

它允许指定字符串/数字必须的固定值,如"A" | "B"0 | 1