TypeScript 参考手册

最后更新:2026-10-22

TypeScript 参考手册

按字母序排列的 70 个 TypeScript 类型条目:基础类型、类型组合、函数与类、泛型、收窄与断言、工具类型与工程配置。

#
!非空断言(后缀 !)告诉编译器"这个值此刻肯定不是 null/undefined",把 T | null | undefined 收窄成 T。它不做任何运行时检查——值真是空的话,...
"a" | "b"字面量类型把"值本身"当作类型:"up"、1、true 都是类型。单独用价值有限,与联合组合后可以精确限定取值范围。
(arg) => R箭头函数自带类型标注语法:参数后冒号、表达式即返回值。给箭头函数变量显式声明函数类型后,函数体参数与返回值全部自动联动——排序比较器、映射器这类一次性回调的推荐写法。
(arg: T) => R函数类型表达式描述"一类函数的形状":参数列表 + => + 返回值((value: string) => string | null)。把它存成 type 别名后,回调、校验器、...
...rest: T[]剩余参数用 ...名字 收集"剩下的所有实参"为一个真数组(...scores: number[]),让函数接受任意个数的同类型参数——它是 arguments 的类型安全替代品。
.d.ts声明文件(.d.ts)只描述"一个库长什么样",不含实现,让 TypeScript 能为纯 JS 库提供类型检查。类型有三个来源:库自带(最好)、社区 @types 包(npm i...
?: / readonly? 把属性标记为可选(可以缺席),readonly 把属性标记为只读(赋值后不可再改)。对象类型里最常用的两个修饰符。
@decorator装饰器是加在类、方法、属性、参数前的特殊语法 @name:用一层函数包装给类附加行为(日志、校验、依赖注入),不用改动类本身的代码。TS 里装饰器仍是实验性特性,需要 tsconf...
[K in keyof T]映射类型"遍历键、变换值":[K in keyof T]: boolean 对 T 的每个键 K 生成同名新属性。它是批量改类型的流水线——Partial 加可选、Readonly...
[key: string]: T索引签名描述"键名不固定、但键的值类型统一"的对象,比如字典、计数器、配置映射。写法是 [key: string]: T。
[T, U]元组是"长度固定、每个位置类型可不同"的数组类型,适合坐标、键值对、函数多个返回值这类位置本身有含义的数据。
`${T}`模板字面量类型在类型层做字符串拼接:`${A}-${B}` 会把 A、B 的所有字面量组合枚举出来。适合事件名、路由、CSS 类名等"前缀+后缀"式的字符串约定。
A
A & B交叉类型 A & B 把多个类型的属性合并成一个:值必须同时满足 A 和 B。适合把若干小接口"混入式"地组合起来。
A | B联合类型 A | B 表示"值是 A 或 B 之一"。使用联合值前必须先收窄(typeof、in 等),编译器才知道当前面对的是哪一种。
abstract class抽象类(abstract class)是"半成品基类":可以包含实现,也可以只声明抽象成员(abstract area(): number)让子类必须补齐。它不能被直接实例化,只能...
anyany 表示"放弃类型检查":任何值都能赋给它,它也能赋给任何类型。迁移旧 JS 或处理真正未知结构时可用,但编译器会对其后的所有操作闭嘴。
arg?: T? 标记可选参数(可以不传),= 给参数设默认值(不传时自动兜底)。两者都让调用方"只传必要的信息",是构造友好函数签名的第一工具。
Array<T>数组类型描述"一组同类型元素",写法有 T[] 和 Array<T> 两种,完全等价。列表、集合、批量数据都用它。
as类型断言(as)是你对编译器说"我比你知道得更清楚,把它当成 T"。它不改变运行时值、不做任何转换,只是覆盖编译器的推断。适用于你掌握编译器拿不到的信息时(如 DOM 查询、第三方...
as constas const 把整个字面量"冻结"成最深层的常量类型:所有属性变成 readonly,所有值收窄成字面量类型(字符串、数字、布尔),数组变成只读元组。它是"从常量表自动推导联合...
assertNever穷尽检查是保证"联合类型的每个成员都被处理"的编译期保险。核心是 assertNever 技巧:把 switch 的 default 分支参数声明为 never——如果漏了某个成员...
Awaited<T>Awaited<T> 模拟 await 的类型效果:把 Promise<T> 解开得到 T,嵌套 Promise(Promise<Promise<T>>)也会递归展开。想要"asy...
B
booleanboolean 只有 true 和 false 两个值,用于功能开关、判断条件和比较结果。
C
class类把数据和操作打包:字段存状态、构造函数初始化、方法定义行为。new 创建实例,this 指向当前实例。TS 在 JS 类之上叠加字段类型标注与编译期检查,让"忘初始化""传错参"...
class<T>泛型类(class Stack<T>)让"类的结构"与"存的数据类型"绑定:一个 Stack<number> 实例里只能进出 number。字段、方法参数、方法返回值都可以引用 T...
contextual上下文类型:当函数字面量出现在"已知类型的位置"(变量注解、数组方法回调、事件处理器),TS 会反推它的参数类型——无需手写注解。map((o) => o.id) 里的 o 之所以...
E
enum枚举把一组相关常量组织到一个命名空间下,成员既有类型也有值。数字枚举默认从 0 自增;字符串枚举显式赋值,可读性更好。
Exclude<T, U>Exclude<T, U> 从联合类型 T 中剔除"可赋给 U"的成员,常用来从大联合里裁掉不关心的分支。它的反向操作 Extract<T, U> 只保留可赋给 U 的成员。两者都...
F
function <T>泛型函数用类型参数 <T> 把"类型"变成参数:同一段逻辑适配多种类型,入参与返回值类型联动。它比 any 安全(保留类型信息),比复制粘贴多份代码省事。
H
HTMLElement/EventDOM 编程的类型全部来自 TS 内置的 DOM lib:元素有继承层级(EventTarget → Node → Element → HTMLElement → HTMLInpu...
I
implementsimplements 让类"认领"一个接口:编译器逐项检查类是否提供了接口要求的全部成员且类型吻合。接口描述"能做什么",类回答"怎么做"——同一个接口可以有多个完全不同的实现。
import/exportES Modules 是 JavaScript 官方的模块标准,TypeScript 完整沿用 export/import 语法,并把"类型"也纳入模块系统:类型可以导出导入,im...
inin 操作符检查某个属性名是否存在于对象上,TypeScript 借此把联合类型收窄到"拥有该属性"的那个成员。当联合的各成员没有共同字段可判别、又是接口(不能用 instance...
in / out型变描述"复杂类型里的类型参数如何影响整体兼容性":返回值协变(子类型可顶替)、参数逆变(接受父类型的函数能顶替)。函数赋值兼容、数组/接口的嵌套兼容都由它决定——理解了它,"为什...
inferinfer 在条件类型的真分支里"捕获"类型:T extends Array<infer U> ? U : never 意思是"如果 T 是数组,就把元素类型抠出来叫 U"。它让类...
instanceofinstanceof 收窄用于"类"的联合:检查某个值是不是某个类的实例,是的话 TS 就把它的类型收窄成这个类。它靠 JS 的原型链在运行时真实判断,是处理 Date、Map、E...
interfaceinterface 用一个名字描述对象的结构:规定有哪些属性、方法以及各自的类型。它只存在于编译期(转译后完全消失),支持 extends 继承与同名声明合并,是与 type 别名...
interface<T>泛型接口在名字后挂类型参数(interface ApiResult<T>),把"容器形状"与"里面装什么"解耦:ApiResult<UserBrief> 与 ApiResult<n...
K
keyofkeyof T 取对象类型 T 的所有键名,得到字面量联合类型:keyof Settings 就是 "volume" | "theme"。它是"键名类型安全"的基石——配合泛型约束...
kind可辨识联合(也叫 tagged union)把一组类型用一个共同的判别字段(如 status、kind)串起来,每个成员的判别字段取不同的字面量值。switch 判别字段时,TS ...
N
name(arg: T): R函数注解给参数和返回值写明类型:调用方一眼看清"传什么、得什么",传错类型在编译期就被拦下。没有注解时 TS 也能靠推断兜底,但显式注解是公共 API 的基本礼仪。
narrowing联合类型把多种可能揉在一个变量里,用之前必须先"问清楚"它此刻到底是什么类型——这个把宽类型缩小到具体类型的过程叫收窄。TypeScript 通过分析 if、switch、真值判断...
nevernever 表示"永远不会有值":抛错或死循环的函数返回它;在类型层它是所有类型的子类型,最出名的用法是 switch 穷尽检查。
new () => T构造签名 new (name: string) => T 描述"这个值可以 new 出一个 T"。把类本身(而非实例)当参数传递时就需要它——工厂函数、依赖注入、插件系统都靠这个类...
NonNullable<T>NonNullable<T> 从类型 T 中剔除 null 和 undefined。适合"字段声明上允许空、但走到这里时业务已保证非空"的场合——比如默认值兜底、数组过滤之后。它本...
null / undefinednull 表示"刻意为空",undefined 表示"还没赋值/不存在"。开启 strictNullChecks 后它们是独立类型,必须先处理空值才能当正常值用。
numbernumber 统一表示整数和小数——JS 只有这一种数字类型。计数、金额、坐标、时间戳都标注为 number。
O
object type对象类型用"属性名: 类型"的结构描述对象:一次性使用可内联,需要复用就交给 interface 或 type。TS 靠"形状匹配"判断兼容。
Omit<T, K>Omit<T, K> 从 T 中"剔除"K 指定的属性,剩下的组成新类型。典型场景是脱敏(去掉 passwordHash)、把数据库行转成对外响应。它与 Pick 方向相反:字段多...
overloads重载声明让一个函数拥有多份"签名说明书":调用方按实参形态获得精确的返回类型,实现体只写一份。TS 按声明顺序逐个匹配,全部不中才报错。
P
Parameters<T>Parameters<T> 取函数类型 T 的参数列表,结果是一个元组类型。有了它就能把"一组参数"整体存储、传递、转发,而不必手写 [string, number, string...
Partial<T>Partial<T> 把 T 的所有属性变为可选:典型场景是"部分更新"(表单草稿、patch 接口),不必为"只改两个字段"再手写一个新类型。它与 Required<T> 互为镜...
Pick<T, K>Pick<T, K> 从 T 中"挑出"K 指定的属性,组成一个新类型。当你只需要一个大类型的一小部分(列表摘要、子集参数)时,不用再手写重复类型——而且源类型改了字段类型,Pic...
Promise<T>异步类型围绕 Promise<T> 展开:async 函数的返回值类型自动包一层 Promise,await 在值层面解开它;工具类型 Awaited<T> 在类型层面做同样的事(...
public / private / protected访问修饰符控制成员可见性:public(默认,内外皆可访问)、private(仅类内部)、protected(类内部与子类)。这是编译期约束——封装出错在写代码时就报错,而不是等运...
R
Readonly<T>Readonly<T> 把 T 的所有属性变为只读:对象创建之后不允许再给属性赋值,编译器直接报错。适合配置对象、快照、共享常量这类"造出来就不该被改"的数据。注意它锁的是属性,和...
Record<K, V>Record<K, V> 构造一个"键为 K、值为 V"的对象类型。K 可以是字面量联合(枚举映射表)或 string/number(开放缓存对象)。相比手写索引签名,Record...
ReturnType<T>ReturnType<T> 取函数类型 T 的返回值类型。最常见写法是 ReturnType<typeof someFn>:函数怎么实现、返回什么结构,类型就自动是什么——不必把返...
S
stringstring 表示文本值。名称、消息、ID 等以字符形式存在的数据都用它标注,是日常代码中出现频率最高的类型。
symbol / bigintsymbol 创建全局唯一、不会重复的值,适合做对象键或常量标识;bigint 表示任意精度整数,用于超过 number 安全范围的大数。
T
T = Default类型参数可以有默认值(<T = string>):不指定时自动采用默认类型,指定了则用指定值。与函数默认参数同思路——"常用场景零配置,特殊场景可覆盖",让泛型 API 用起来更顺...
T extends U约束(extends)给类型参数"划定范围":<T extends HasId> 承诺"T 至少有 id: number"。约束之内可以放心访问 T 的公共成员,约束之外(传个 s...
T extends U ? X : Y条件类型让类型做"选择题":T extends U ? X : Y——满足条件选 X,否则选 Y。它把运行时的三元判断搬到类型层,配合泛型可以写出随输入类型变化的返回类型。
try / catchTS 错误处理有两个痛点:一是 catch 的 err 在严格模式下是 unknown(JS 可以 throw 任何值,编译器不敢假设它是 Error),必须收窄后才能用 .mes...
tsconfig.jsontsconfig.json 是 TypeScript 项目的"总开关"文件:放在项目根目录,告诉编译器(tsc)编译哪些文件、编译成什么样。其中 strict 是最重要的一个开关—...
typetype 给任意类型起名字:对象、联合、元组、函数、字面量都能起名,是适用范围最广的类型命名方式,与 interface 并列。
typeoftypeof 收窄是最常用的类型守卫:在运行时用 typeof 检查值的类型字符串,TypeScript 会顺着这个判断把联合类型收窄到对应分支。比如 typeof value =...
U
unknownunknown 是"安全的 any":任何值都能赋给它,但使用前必须先收窄或断言,否则编译器不放行。接收外部输入(API 响应、JSON.parse 结果)的首选类型。
V
voidvoid 表示"函数没有有意义的返回值"。日志函数、事件回调常用它标注,告诉调用方"别指望拿到返回值"。
X
x is T内置守卫(typeof/instanceof/in)不够用时,可以自己写类型守卫函数:返回值写成 x is T(类型谓词),TS 就会在函数返回 true 的分支里把 x 收窄成 ...
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏