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 | symbol
  • PromiseLike<T> / Promise<T>
  • Iterable<T> / Iterator<T> / IterableIterator<T> / Generator
  • ArrayLike<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:Object Array Math JSON Date RegExp Error/TypeError 等
  • lib.es2015+.d.ts:Map Set WeakMap WeakSet Promise Symbol Proxy Reflect ArrayBuffer DataView Int8Array…Float64Array
  • lib.dom.d.ts:Window Document HTMLElement Event MouseEvent NodeList Fetch 等(不属于语言,属宿主环境)
  • Node 侧:Buffer process fs 等来自 @types/node

六、速记 & 易混点

  1. unknown 替代 any:any 会向上"传染",unknown 必须先收窄(typeof/in/守卫)才能用。
  2. void vs undefined:void 是"返回值无意义",可把 () => number 赋给 () => void;undefined 是具体值类型。
  3. never vs void:never = 函数根本不会结束(抛错/死循环);void = 正常返回但没值。
  4. object vs {} vs Object:object 排原始类型;{} 几乎等于 unknown 减 null/undefined;Object 是装箱接口,别用。
  5. 装箱类型陷阱:String 有 charAt 等方法但 const s: string = new String() 会出错,反之 string 值能自动装箱调用方法。
  6. 想看定义:IDE 里 Ctrl+点击 Partial 会跳转到 node_modules/typescript/lib/lib.es5.d.ts,是权威清单。
posted @ 2026-10-13 10:22  寅信  阅读(2)  评论(0)    收藏  举报