Skip to main content

106 posts tagged with "全栈开发"

View All Tags
· 4 min read

TS 5.0+ 起 enum 已经从"首选"变成"备选"——能 as const 对象就别 enum。

  • 三种 enum 类型:数字(自动递增 + 反向映射)、字符串、异构(不推荐)
  • 数字 enum 的坑:编译后是 JS 对象,无法 tree-shake,反向映射易踩坑
  • 字符串 enum:tree-shake 友好,但运行时仍有开销
  • const enum:跟 isolatedModules 冲突,TS 5.0 起不再推荐
  • 首选替代as const 对象 + 联合类型,零运行时开销
· 4 min read

TS 基础类型 10 年没变,但 几个反直觉的细节 容易踩坑。

  • 原始类型:boolean / number / string / bigint / symbol / null / undefined
  • unknown > any必须先 narrow 才能用,比 any 安全
  • 三个长得像object / Object / {} 是三种不同类型
  • void 不只是 "无返回":也指代 undefined 这个值
  • Tuple 陷阱:长度不可越界,但 push() 能扩
· 4 min read

TS 类型兼容性核心是 结构化类型——多的可以赋值给少的,duck typing 是关键。

  • 核心规则:成员多的类型可以赋值给成员少的,反之不行
  • 特殊类型any 万能,never 万不能
  • 函数参数:默认双变,开 strictFunctionTypes 后变逆变
  • Class:私有成员相互不兼容(除继承外)
  • Generic:未实例化的泛型可以互相兼容
· 3 min read

泛型函数是 TS 类型系统里复用率最高的特性——核心是 类型变量 T + 约束 extends 两个机制。

  • 基础用法function id<T>(arg: T): T——比 any 安全
  • 类型推断:调用时不用显式 <T>,TS 自动推断
  • 多类型变量<T, U> 分别约束不同位置
  • 约束语法T extends Person 限定类型范围
  • 避坑:泛型里访问属性前必须 narrow 或约束
· 3 min read

extendsimplements 是两种完全不同的关系——前者是类型组合,后者是合同检查,混为一谈是新手最常踩的坑。

  • extends:接口继承接口,支持多继承
  • implements:类实现接口,必须实现所有成员,可以多加
  • 合并 vs 验证:extends 合并成员;implements 只做编译期结构验证
  • 现代写法:interface 能 extends type,type 用 & 合并
  • 关键差异implements 不参与运行时