TypeScript 类型系统精简知识点

一、基础类型体系

  • TypeScript 继承 JavaScript 的 8 种基本类型,作为类型系统基础,复杂类型由其组合而成:
    • boolean:仅包含 truefalse 两个值。
    • string:包含所有字符串(普通字符串、模板字符串均适用)。
    • number:包含整数、浮点数、非十进制数(如十六进制 0xffff)。
    • bigint:包含大整数(需后缀 n,如 123n),与 number 不兼容,依赖 ES2020+ 编译目标。
    • symbol:包含所有 Symbol() 函数返回值。
    • object:包含对象、数组、函数(狭义对象类型)。
    • undefined:仅包含值 undefined,表示未定义。
    • null:仅包含值 null,表示空值。
  • 注意:类型名称均为小写,首字母大写的 Number 等是内置对象,非类型。

二、包装对象类型

  • 5 种原始类型(booleanstringnumberbigintsymbol)存在对应的包装对象。
  • TypeScript 用大小写区分:
    • 小写类型(如 string):仅包含字面量(如 'hello')。
    • 大写类型(如 String):包含字面量和包装对象(如 new String('hello'))。
  • 建议:优先使用小写类型,因大写类型可能与内置方法参数类型冲突(如 Math.abs() 要求 number)。

三、Object 与 object 类型

类型含义包含范围建议
Object广义对象(JavaScript 广义对象)原始类型值、对象、数组、函数(除 undefined/null避免使用
object狭义对象仅对象、数组、函数(不包含原始类型值)优先使用
  • 两者均仅包含内置属性/方法,不包含自定义属性(需额外定义对象类型)。

四、undefined 和 null 的特殊性

  • 既是值也是类型,默认可赋值给任何类型变量(与 JavaScript 行为一致)。
  • 编译选项 strictNullChecks: true 时:
    • 不可赋值给其他类型变量(除 any/unknown)。
    • undefinednull 不可互赋,仅可赋值给自身类型。

五、值类型

  • 单个值可作为类型(如 let x: 'hello' 仅允许 x = 'hello')。
  • const 声明的变量(非对象)会被推断为值类型(如 const x = 'hi' 类型为 'hi')。
  • 子类型与父类型:子类型(如 5)可赋值给父类型(如 number),反之不行。

六、联合类型与交叉类型

  • 联合类型A|B):值需属于 AB(如 string|number 允许字符串或数值)。
    • 需通过“类型缩小”处理(如 typeof 判断、switch 分支)区分具体类型后操作。
  • 交叉类型A&B):值需同时属于 AB(主要用于对象合成,如 {a: number} & {b: string} 需同时含 ab 属性)。

七、类型别名(type 命令)

  • 作用:为类型定义别名(如 type Age = number),增强可读性和可维护性。
  • 特性:
    • 不可重名,块级作用域。
    • 支持嵌套和表达式(如 type Greeting = hello ${World}``)。
    • 编译后会被删除(仅 TypeScript 类型层面有效)。

八、typeof 运算符

  • TypeScript 中,typeof 可获取值的类型(用于类型运算):
    • 示例:const a = {x: 0}; type T = typeof aT{ x: number }
    • 限制:参数只能是标识符(不可为表达式),且不能是类型本身。
  • 与 JavaScript typeof 区别:TypeScript 类型运算的 typeof 编译后会被删除,仅保留值运算的 typeof

九、块级类型声明

  • 类型可在代码块(如 if 块)内声明,仅在当前块内有效(块级作用域)。

十、类型兼容

  • 子类型:若类型 A 可赋值给类型 B,则 AB 的子类型。
  • 规则:父类型场景可使用子类型,子类型场景不可使用父类型(因子类型含父类型所有特征,反之不成立)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值