TypeScript学习实战-类型别名

255 阅读2分钟

前言

前面更文通过学习 TS 的类型/枚举/函数/类/泛型等,基本类型,其他类型和高级类型 已经对TS有了初步的熟悉, 其中有和 JS 中并存的知识点, 也有相对 JS没有的, 那本文来学习 TS 重要知识点

现在 TypeScript + Vue3 应用挺广了, 如果不学习总感觉跟不上大厂的节奏. 学习 TypeScript(虽然觉得也是可选的,但还是要学,真卷...) 这里有记录学习 TypeScript 的过程, 收录在 TypeScript 实战专栏

Typescript 相关文档

Typescript 官网地址: typescriptlang.org/zh/ Typescript 中文文档:TS-类型别名

TypeScript 类型别名

前面对TS的各种类型进行了一系列的学习, 也都是相当于初级的地带(入门), 在进入重点和难点前这里还有一个类型的知识点: 类型别名(给类型起个名)

TS文档-类型别名会给一个类型起个新名字, 类型别名有时和接口很像, 但是可以作用于原始值、联合类型、元组以及其它任何你需要手写的类型.

起别名创建了一个新名字来引用那个类型, 并不会新建一个新的类型.

来创建类型别名使用语法:

type TypeName = someValidTypeAnnotation

小例子:

type sometype = boolean | string

let a: sometype = true // ok
let b: sometype = 'hello' // ok
let c: sometype = 123 // 不能将类型 “123” 分配给类型 "sometype"

另外同接口一样, 类型别名还可以是泛型, 也可以使用类型别名来在属性里引用自己:

type Container<T> = { value: T };

type Tree<T> = {
    value: T;
    left: Tree<T>;
    right: Tree<T>;
}

类型别名 和 interface

类型别名和 interface 怎么区分, 因为两者看起来 非常像

  1. 接口是创建了一个新的名字, 可以在任何地方使用, 而类型别名并不会创建新名字, 错误提醒也不会使用别名
  2. 另一个重要区别是类型别名不能被 extends和 implements(自己也不能 extends和 implements其它类型)
  3. 如果你无法通过接口来描述一个类型并且需要使用联合类型或元组类型,这时通常会使用类型别名
  4. 类型别名不能出现在声明右侧的任何地方