# TypeScript

# 练习目录

各种范型类型实现

# type 和 interface 区别

参考文章

相同点

  • 接口定义的两种不同形式,都可以描述一个对象或者函数
  • 都支持继承,而且可以互相继承,但是语法有差异

不同点

  • type 可以声明基本类型别名,联合类型,元组等类型
// 基本类型别名
type Name = string;

// 联合类型
interface Dog {
  wong();
}
interface Cat {
  miao();
}

type Pet = Dog | Cat;

// 具体定义数组每个位置的类型
type PetList = [Dog, Pet];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • type 语句中可以使用 typeof 获取实例的类型进行赋值
// 当你想获取一个变量的类型时,使用 typeof
let div = document.createElement("div");
type B = typeof div;
1
2
3
  • type 可以申明联合类型,如 type unionType = myType1 | myType2
  • type 可以申明元组类型,如 type yuanzu = [myType1, myType2]
  • interface 可以声明合并,type 的话会报重复定义
interface test {
  name: string;
}
interface test {
  age: number;
}

/*
  test实际为 {
    name: string
    age: number
  }
*/
1
2
3
4
5
6
7
8
9
10
11
12
13

# TS 里面有哪些 JavaScript 没有的类型

  • any: 可以赋予任意类型的值
  • tuple: 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要一样 let x: [string, number];
  • enum: 枚举类型用于定义值集合
  • void:标识方法返回值的类型,表示方法没有返回值
  • never: 是其它类型(包括 null 和 undefined)的子类型,是不会发生的类型。例如,never 总是抛出异常或永不返回的异常的函数表达式的返回类型
  • unknown: 未知类型,一般在使用后再手动转具体的类型
  • union: 联合类型,多种类型之一 string | number; // string 或 number
  • intersection: 交叉类型,多种类型合并 { a: string; } & { b: number; } // => { a: string; b: number }
  • Generics: 泛型