TypeScript 语法速查表 - TypeScript 类型与泛型编程大全

这套速查给想把“写清楚类型”落实进日常代码的 JS/前端开发者。与只贴一堆类型定义的片段不同,这里按“变量→接口→泛型→工具类型”递进组织,每一条都会解释它在什么场景解决什么问题,比如什么时候用 interface 而不是 type、怎么用 Partial 把表单字段变可选、Pick/Omit 如何快速从大类型里挑子集。读完你应能给出函数和对象的准确类型,用联合字面量限定取值,并借助工具类型做类型体操来缩小可选项。

编程语言·共 23 条命令·最后更新 2026-07-21
typescriptts类型前端

基础类型 8

let name: string = "John"
字符串类型,存放文本;单双引号和反引号模板字符串均可
let age: number = 30
数字类型,整数浮点不分家,NaN/Infinity 也是 number
let isActive: boolean = true
布尔类型,仅 true/false 两个取值
let items: string[] = ["a", "b"]
数组类型,元素须全部是 string
let tuple: [string, number] = ["a", 1]
元组类型,长度与每位类型都固定,超出即报错
let value: any = "anything"
任意类型,可赋任何值也不报错,但会绕过类型检查,尽量少用
let value: unknown = "safe"
未知类型,赋值随意,但使用前必须先做类型收窄或断言
let value: never
永不存在的值,通常表示抛异常或无限循环的返回类型

接口与类型 5

interface User { name: string; age: number }
定义接口,适合描述对象结构,支持声明合并与 extends
type User = { name: string; age: number }
类型别名,可描述联合/交叉/映射类型,但不能被重复声明合并
interface Admin extends User { role: string }
接口继承,Admin 自动带上 User 的所有属性再加 role
type Status = "active" | "inactive"
联合类型,取值被限定为列出的字面量之一
type Result = string | null | undefined
可空类型,数据处理常用来表达“可能没有值”

泛型 4

function identity<T>(arg: T): T { return arg }
泛型函数,入参返回同型,调用时类型由实参自动推断
interface Container<T> { value: T }
泛型接口,T 在实例化时传入具体类型
type Pair<T, U> = [T, U]
多参数泛型,元组里两位类型可各自不同
function getFirst<T>(arr: T[]): T
泛型约束写法,只接收数组并返回首元素,类型随调用变化

工具类型 6

Partial<User>
所有属性都变可选,适合“只更新部分字段”的入参
Required<User>
所有属性都必填,和 Partial 相反
Readonly<User>
所有属性都只读,赋值即报错
Pick<User, "name" | "age">
从 User 中只留 name 和 age 两个字段
Omit<User, "age">
从 User 中去掉 age,保留其余所有字段
Record<string, number>
生成键名 string、值类型 number 的对象类型

提示

  • unknown 比 any 更安全,使用前必须做类型检查或类型断言。
  • interface 可以声明合并,type 不能;type 支持联合类型和映射类型。
  • as const 可以让对象属性变成字面量类型,如 { role: "admin" as const }。
  • satisfies 运算符(TS 4.9+)可以验证类型同时保留推断类型。

常见问题

typescript 的 interface 和 type 该怎么选?

大部分场景二者可互换,type 还能表示联合、元组、映射等 interface 表达不了的类型。若对象需要被扩展、实现或对外暴露,官方倾向用 interface(支持声明合并);做联合、交叉、条件类型等类型体操时用 type。同一代码库内保持风格一致即可。

typescript 的 any 和 unknown 有什么区别?

any 会关闭类型检查,可赋给任何类型也能被任意读写,等于绕过类型系统;unknown 表示还不知是什么,只能接收赋值,使用前必须做类型收窄(typeof、instanceof 或断言)。想让代码更安全,就尽量用 unknown 替代 any。

泛型约束 extends 有什么用?

泛型约束用 extends 限定传入类型必须具备某些结构,例如 <T extends {length: number}> 保证 T 有 length 属性,函数内就能安全调用 t.length 而不报错。约束可以组合,并且返回类型仍保留具体泛型的推导结果。

Partial、Pick、Omit 这几个工具类型怎么区分?

Partial<T> 把 T 的所有属性变成可选,常用于表单提交前部分字段已填的场景;Pick<T, K> 从 T 中挑出指定键 K 组成新类型;Omit<T, K> 相反,剔除键 K 保留其余。三者都只是编译期类型,不会改变运行时的对象结构。

类型断言 value as T 什么时候用?

as 断言是告诉编译器我知道这是什么类型,应在确实比编译器更清楚时使用,比如把从 any 或 JSON 解析来的数据收窄。滥用断言会隐藏真 bug;优先写可被推断的类型或先做运行时校验(如 hasOwnProperty)再断言。非空断言 expr! 只是去掉 null/undefined,若实际为空会在运行时报错。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们