TypeScript 速查表

TS 类型系统、接口、泛型、工具类型、tsconfig 配置

🔍
基本类型
let x: number = 10 let s: string = "hi" let b: boolean = true let n: null = null let u: undefined = undefined
原始类型
let any: any let unk: unknown let nev: never let vd: void
特殊类型:any / unknown / never / void
let arr: number[] = [1, 2] let tup: [string, number] = ["a", 1]
数组与元组
接口与类型别名
interface User { id: number name: string age?: number // 可选 readonly email: string // 只读 }
interface 定义对象类型
interface Admin extends User { role: string }
接口继承
type ID = string | number type Point = { x: number; y: number }
type 类型别名
联合 / 交叉 / 断言
type Result = string | number | null
联合类型
type AB = A & B
交叉类型
type Status = "pending" | "done" | "error"
字面量类型
x as string <string>x
类型断言
泛型
function identity<T>(x: T): T { return x }
泛型函数
interface Box<T> { value: T }
泛型接口
function len<T extends { length: number }>(x: T) {}
泛型约束
function get<T, K extends keyof T>(obj: T, key: K) {}
keyof 约束
工具类型
Partial<T>
所有属性变为可选
Required<T>
所有属性变为必选
Readonly<T>
所有属性变为只读
Pick<T, K>
挑选部分属性
Omit<T, K>
排除部分属性
Record<K, V>
构造键值对类型
Exclude<T, U> / Extract<T, U>
从联合类型中排除/提取
ReturnType<typeof fn> Parameters<typeof fn>
获取函数返回值 / 参数类型
NonNullable<T>
排除 null 和 undefined
函数类型
function add(a: number, b: number): number {}
函数声明带类型
const add = (a: number, b: number): number => a + b
箭头函数带类型
type Fn = (a: number) => string
函数类型别名
function f(x: string): string function f(x: number): number function f(x: any) { return x }
函数重载
class Animal { private name: string protected age: number public constructor(name: string, age: number) { this.name = name; this.age = age } }
类定义(public/private/protected)
class Dog extends Animal { bark(): void { console.log("woof") } }
类继承
abstract class Shape { abstract area(): number }
抽象类
类型收窄
if (typeof x === "string") {}
typeof 类型守卫
if (x instanceof Date) {}
instanceof 类型守卫
if ("name" in obj) {}
in 操作符收窄
function isString(x: unknown): x is string { return typeof x === "string" }
自定义类型守卫(is)
编译器 (tsc)
tsc --init
生成 tsconfig.json
tsc
编译 TypeScript
tsc --watch
监听模式编译
"strict": true
开启严格模式
"target": "ES2020" "module": "ESNext"
指定编译目标和模块