SuperAPI AI 工具集

typescript-best-practices

编程与开发

查看项目

更新于 10-16 16:28

技能介绍

TypeScript best practices 是一个以技能文件(SKILL.md)形式组织的规则集合,来源于 mariusflorescu/pstack-t3。根据其描述,它用于在阅读或编辑任何 .ts 或 .tsx 文件时应用 TypeScript 最佳实践。

用途

该技能汇总了一组 TypeScript 类型与代码实践规则,目标是在编写或修改 TypeScript 代码时提供统一的最佳实践指导。技能文档还要求先应用 type-system-discipline 这一原则技能(principle-"<name>"/SKILL.md)。文档说明 pstack 的多数技能面向用户,工具的 skill 工具本身无法加载它们。

主要规则

技能以表格形式列出各项规则及摘要:

  • 可辨识联合(Discriminated unions):用 kind 字面量判别字段来建模变体,使不可能的状态无法被表示,不使用可选字段的堆积方式。
  • 品牌类型(Branded types):用 & { readonly __brand: "X" } 标记原始类型,避免相互混淆,并在边界处校验一次。
  • 构造式建模(Constructive modeling):让非法值无法被构造,例如用 [T, ...T[]] 表示非空、用 [T, T][] 表示偶数长度、用起点加时长表示区间;它不是运行时守卫,也不是对 refinement types 的期望。
  • 最简全定义类型(Simplest total type):当对 T[] 的每个操作都保持全定义时保留 T[];仅当宽松类型迫使使用 !、强制转换或“不可能发生”的抛出时,才强化为 NonEmpty<T>。
  • 用 unknown 代替 any:外部数据应为 unknown。
  • Schema 优先于守卫(Schemas before guards):在手工逐属性编写类型守卫之前,使用仓库的运行时 schema 库并从 schema 推断类型,例如 z.infer。
  • 避免 as 强制转换(No as casts):每个 as 都可能是等待发生的运行时崩溃;仅在验证之后进行转换。
  • 类型收窄层级(Narrowing hierarchy):判别式 switch > in 运算符 > typeof/instanceof > 用户定义类型守卫 > as。
  • 类型守卫(Type guards):守卫必须验证其声明;说谎的守卫比 as 更糟,因为缺陷隐藏在声称安全的名称之后;命名使用 isX 或 hasX。
  • 穷尽性(Exhaustiveness):在 default 分支内联 const _exhaustive: never = x;,使新增变体时编译器报错。
  • 用 satisfies 代替 as:在不拓宽字面量类型的前提下校验值。
  • 边界校验(Boundary validation):在数据进入处进行解析,转换为具名领域类型;Record<string, unknown>(无论何种写法)在该解析处停止;内部信任类型,参见 boundary-discipline 原则技能。
  • 从 schema 派生类型(Schema-derived types):在声明新 interface 之前,先使用 Pick/Omit/Parameters/ReturnType/Awaited/typeof。
  • 对象参数(Object args):传递对象而非位置参数,使参数顺序自文档化;在热路径(逐帧渲染、分词器、解析器)上跳过此做法。
  • 真实测试(Real tests):不要 mock 能真实运行的东西;优先使用框架的真实测试原语并配合泄漏/可释放检查,在运行中的构建里验证 UI;仅 mock 无法在本地运行的部分。
  • 结构化遥测(Structured telemetry):优先使用带足够上下文、可凭 id 调试的结构化日志诊断;发布代码中不使用 console.log。

使用方式

文档说明,被加粗或用反引号标记、或通过 /<name> 运行的技能,是位于本技能目录旁的 ../<name>/SKILL.md 文件;不带前缀的原则名对应 ../principle-<name>/SKILL.md。读取该文件并遵循它。文档还指出,多数 pstack 技能面向用户,因此 skill 工具无法加载它们。

适用场景

适用于阅读或编辑任何 .ts 或 .tsx 文件的场景,尤其是需要在 TypeScript 项目中统一类型建模、边界校验、类型守卫与测试实践的场合。

限制与未提供信息

示例位于 references/patterns.md(资料仅给出位置,未提供内容)。该技能的收费、价格、支持的平台、具体安装命令与版本要求等事实,资料中暂未提供。