深入浅出TypeScript|青训营笔记

59 阅读3分钟

TypeScript

什么是TS

  • 从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性
  • TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法。

TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。

TS的开源教程 AwesomeTypescript

基本类型

哪些特别的基本类型?

    • enum类型
    • 对JavaScript标准数据类型的一个补充
    • 枚举类型提供的一个便利是你可以由枚举的值得到它的名字
    • Any
    • 在编程阶段还不清楚类型的变量指定一个类型Any
    • void -某种程度上来说,void类型像是与any类型相反,它表示没有任何类型
    • never类型
    • 表示的是那些永不存在的值的类型
    • never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;
    • 变量也可能是 never类型

特别的 类型断言

  • 就是你知道他是什么类型,在编译操作给他类型之前就认定这个变量或是参数的类型

接口

  • TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约
  • 比如:使用接口来描述:必须包含一个label属性且类型为string
interface LabelledValue {
    label: string;
}
function printLabel(labelledObj: LabelledValue) { 
    console.log(labelledObj.label); 
}
  • 类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
  1. 声明一个Greeter
  2. 这个类有3个成员:greeting的属性,构造函数和greet方法
  3. 使用new构造了Greeter类的一个实例
  4. 调用之前定义的构造函数,创建一个Greeter类型的新对象,并执行构造函数初始化它

TS联合类型/交叉类型

  • 联合类型(Union Types)表示取值可以为多种类型中的一种
  • 联合类型使用 | 分隔每个类型
  • 交叉类型是将多个类型合并为一个类型
  • 例如,Person & Serializable & Loggable
  • 就是说这个类型的对象同时拥有了这三种类型的成员

TS泛型使用场景

什么是泛型?

  • 泛型(Generics)是一种编程技术
  • 它可以让代码具有更高的通用性和灵活性
  • 泛型就是把数据类型作为参数进行传递,以便在编译时确定类型,从而实现代码的通用性
function identity<T>(arg: T): T {
  return arg;
}

什么时候用泛型?

  • 在 TypeScript 中,泛型可以让我们编写更加通用的代码,减少代码重复和冗余,提高代码的可复用性和可扩展性。
  • 容器类数据结构,例如数组、列表、堆栈、队列等,可以使用泛型来实现通用的容器类数据结构,以便支持不同类型的元素。
  • 函数:当函数需要支持多种类型的参数或返回值时,可以使用泛型来实现通用的函数。例如,可以编写一个通用的排序函数,支持对任意类型的数组进行排序。
  • :当类需要支持多种类型的属性或方法时,可以使用泛型来实现通用的类。例如,可以编写一个通用的树节点类,支持存储任意类型的数据。

总之,当我们需要编写具有通用性的代码时,就可以考虑使用泛型