typeScript 知识点汇总

5 阅读3分钟

一、基本类型与类型注解

  • 原始类型
    stringnumberbooleannullundefinedsymbolbigint

  • 数组与元组
    number[] 或 Array<number>
    元组:[string, number] 固定长度与类型

  • any / unknown / never / void

    • any:关闭类型检查,尽量避免。
    • unknown:安全的“任意类型”,需类型守卫后才能使用。
    • never:永不返回的函数(抛出错误或无限循环)或不可能存在的类型。
    • void:无返回值的函数。
  • 对象类型
    { name: string; age?: number } 可选属性,只读属性 readonly

  • 函数类型

    • function: 表示函数类型。
    • void: 表示函数没有返回值。
    • any: 表示任意类型。

二、接口与类型别名

  • 接口 interface
    定义对象结构,可扩展(extends),可重复声明(合并),interface 用 extends 扩展

  • 类型别名 type
    可定义联合类型、元组、原始类型别名等,不可重复声明,type 用交叉 & 扩展

  • 区别与使用场景

    • 对象结构优先用 interface,需要联合/交叉/映射类型时用 type

三、高级类型

  • 联合类型 | 与 交叉类型 &
    string | numberA & B 同时满足
  • 字面量类型
    type Direction = 'up' | 'down'
  • 类型守卫
    typeofinstanceof、自定义类型谓词 is
  • 类型断言
    as 或 <>,非空断言 !
  • 索引签名
    [key: string]: any
  • 映射类型
    Partial<T>Required<T>Readonly<T>Pick<T, K>Omit<T, K>Record<K, T> 等
  • 条件类型
    T extends U ? X : Yinfer 关键字

四、类与面向对象

  • 类成员
    public(默认)、privateprotectedreadonly
  • 抽象类与抽象方法
    abstract class,不能被实例化
  • 类作为类型
    类同时创建值空间和类型空间
  • 实现接口 implements
  • 参数属性
    构造函数中直接声明 constructor(public name: string) {}

五、泛型

泛型是一种在定义函数、类或接口时使用类型参数的方式,以增加代码的灵活性和重用性。在TypeScript中,可以使用来创建泛型

  • 泛型函数
    function identity<T>(arg: T): T
  • 泛型接口与类
    interface Box<T> { value: T }
  • 泛型约束
    T extends Lengthwise
  • 泛型默认类型
    T = string

六、模块与命名空间

  • ES 模块
    import / export
  • 命名空间 namespace
    内部模块,常用于声明文件(.d.ts),避免全局污染

七、枚举(enum)

枚举是一种对数字值集合进行命名的方式。它们可以增加代码的可读性,并提供一种便捷的方式来使用一组有意义的常量。例如:

enum Color {
    Red,
    Green,
    Blue
}

let selectedColor: Color = Color.Red;

枚举和常量枚举的区别:

  • 枚举可以包含计算得出的值,而常量枚举则在编译阶段被删除,并且不能包含计算得出的值,它只能包含常量成员。
  • 常量枚举在编译后会被删除,而普通枚举会生成真实的对象。

、声明文件

  • .d.ts 文件用于描述已有 JS 库的类型
  • declare 关键字
  • 三斜线指令 /// <reference types="..." />

常见面试题

anyunknownnevervoid 的区别?

  • any:放弃类型检查,任何操作都允许,应尽量避免。

  • unknown:表示“未知类型”,必须先通过类型守卫(如 typeofinstanceof)才能使用其上的操作。

  • never:表示永不存在的值,常用于抛出异常、无限循环的函数返回类型,或条件类型中不可达的分支。

  • void:表示函数没有返回值(或返回 undefined)。

泛型的作用?泛型约束如何实现?

  • 泛型允许定义“类型参数”,使组件可复用,同时保留类型安全。
  • 泛型约束通过 extends 实现,如 function logLength<T extends { length: number }>(arg: T): T,限制传入类型必须包含 length 属性。