TypeScipt | 青训营笔记

115 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第7天。

对于编程开发,我们有一个共识:错误出现的越早越好。写代码期间发现错误优于代码编译期间发现错误,代码编译期间发现错误优于代码运行期间。

JavaScript 中一个非常常见的错误是类型错误,因为JS对传入参数的类型并没有限制,而这种错误往往在运行期间才能发现。

直到今天 JavaScript 本身并不支持类型检测,这不仅导致类型错误的发生,而导致了前端开发者类型思维的缺失。

TypeScript 则是为了解决这一个痛点出现的。

TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。

基本语法

var/let/const 标识符: 数据类型 = 赋值;

基本数据类型

  1. number类型
  2. boolean类型
  3. string类型

对象类型

    interface Iperson {
        name: string;
        age: number;
    }
    const person1: Iperson  = {
        name: "xxx",
        age: 18
    }

函数类型

    function add(x: number, y: number) : number {
        return a + b;
    }
    const add2: (x: number, y: number) => number = (x, y) => x + y;

数组类型

    type IArr1 = number[];
    type IArr2 = Array<string>; //泛型表示
    type IArr3 = [number, string, number]; //元组表示

补充类型

void 空类型,表示无赋值

any 任意类型,是所以类型的子类型

enum 枚举类型

泛型

先不指定具体的类型,在使用的时候在指定类型的一种特性。

//泛型函数
function identity<T>(arg: T): T { 
    return arg; 
}

//泛型类
class GenericNumber<T> { 
    zeroValue: T; 
    add: (x: T, y: T) => T; 
} 
let myGenericNumber = new GenericNumber<number>();

字符串 / 数字 字面量

允许指定字符串 / 数字必须的固定值

    type Iel = 'html' | 'body'

高级类型

联合/交叉类型

联合类型: IA | IB,表示一个值可以说几种类型之一

交叉类型: IA & IB,多种类型叠加在一起成为一种类型,包含所需的所有类型的特性。

类型保护

类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。 要定义一个类型保护,我们只要简单地定义一个函数,它的返回值是一个 类型谓词

    function isFish(pet: Fish | Bird): pet is Fish { 
        return (<Fish>pet).swim !== undefined; 
    }