typescript定义了哪些内置的类型?
TypeScript 内置类型全景
分两层看:① TS 语言内置的关键字类型(lib.es5.d.ts 里定义的原始/全局类型)和 ② 随 TS 提供的标准库声明(DOM、ES20xx API)。
一、基础原始类型(对应 JS)
| 类型 | 说明 |
|---|---|
string / number / boolean |
基本类型 |
bigint |
ES2020,100n |
symbol |
Symbol();unique symbol 用于字面量常量 |
null / undefined |
strictNullChecks 开启后不再自动并入其他类型 |
object |
非原始值(不含 string/number/boolean/symbol/null/undefined) |
Array<T> / T[] / ReadonlyArray<T> |
数组与只读数组 |
[A, B, C] 元组 |
定长定类型;支持可选元素 [string, number?]、剩余 [string, ...number[]]、具名元组 [a: string, b: number] |
Function |
任意函数(少用,丢失签名;用 (x: T) => R) |
⚠️ 别用装箱类型:String / Number / Boolean / Object / Symbol/{}。用小写 string/number/...。{} 表示"非 null/undefined 的任何值",几乎不校验。
二、TS 特有的顶层/底层类型
| 类型 | 含义 | 典型用法 |
|---|---|---|
any |
关闭所有检查,可赋给任何类型 | 迁移期临时用,会污染 |
unknown |
未知,任何值都能赋给它,但用之前必须收窄 | 替代 any 的安全写法(如 JSON.parse 结果) |
never |
空集:永不返回/不可能存在 | 抛异常函数返回、穷尽检查的兜底分支 |
void |
函数无返回值 | void ≠ undefined(void 只表示"返回值被忽略") |
字面量类型 'a' | 1 | true |
精确值 | 联合后形成枚举式常量 |
模板字面量 `btn-${'sm'|'lg'}` |
TS 4.1+ 字符串模式类型 |
function fail(msg: string): never { throw new Error(msg) } // never
function noop(): void { } // void
// 穷尽检查(never 的经典用法)
function check(x: 'a' | 'b') {
if (x === 'a') return 1
if (x === 'b') return 2
const _exhaustive: never = x // 漏分支就报错
}
三、lib.es5.d.ts 里的全局类型
工具类型(类型体操的地基)
Partial Required Readonly Pick Omit Record
Exclude Extract NonNullable Awaited
Parameters ConstructorParameters ReturnType InstanceType
ThisParameterType OmitThisParameter ThisType
Uppercase Lowercase Capitalize Uncapitalize // 内在类型(intrinsic)
其他全局类型别名
PropertyKey=string | number | symbolPromiseLike<T>/Promise<T>Iterable<T>/Iterator<T>/IterableIterator<T>/GeneratorArrayLike<T>(有 length 的伪数组,如arguments)IArguments、TypedPropertyDescriptor<T>ThisType<T>(配合对象字面量指定this)Awaited<T>(递归拆 Promise)
四、TS 语言级的特殊类型(不是"名字",是机制)
| 机制 | 写法 | 说明 |
|---|---|---|
keyof |
keyof T |
取键联合 |
| 索引访问 | T[K] |
取属性值类型 |
| 映射类型 | { [K in keyof T]: ... } |
遍历键 |
| 条件类型 | T extends U ? A : B |
分支 |
infer |
T extends (...a: any[]) => infer R ? R : never |
提取 |
typeof / as const |
值 → 类型 / 收窄为字面量 | |
this 类型 |
类方法返回 this |
支持链式调用 |
| 类型断言 | as / <T> / ! / satisfies(4.9) |
五、标准库声明(随 TS 提供,按 lib 配置引入)
"lib": ["ES2020", "DOM", "DOM.Iterable"] // 你项目 tsconfig 的配置
lib.es5.d.ts:ObjectArrayMathJSONDateRegExpError/TypeError等lib.es2015+.d.ts:MapSetWeakMapWeakSetPromiseSymbolProxyReflectArrayBufferDataViewInt8Array…Float64Arraylib.dom.d.ts:WindowDocumentHTMLElementEventMouseEventNodeListFetch等(不属于语言,属宿主环境)- Node 侧:
Bufferprocessfs等来自@types/node
六、速记 & 易混点
unknown替代any:any会向上"传染",unknown必须先收窄(typeof/in/守卫)才能用。voidvsundefined:void是"返回值无意义",可把() => number赋给() => void;undefined是具体值类型。nevervsvoid:never= 函数根本不会结束(抛错/死循环);void= 正常返回但没值。objectvs{}vsObject:object排原始类型;{}几乎等于unknown减 null/undefined;Object是装箱接口,别用。- 装箱类型陷阱:
String有charAt等方法但const s: string = new String()会出错,反之string值能自动装箱调用方法。 - 想看定义:IDE 里 Ctrl+点击
Partial会跳转到node_modules/typescript/lib/lib.es5.d.ts,是权威清单。

浙公网安备 33010602011771号