SuperAPI AI 工具集

pstack-typescript-best-practices

编程与开发

查看项目

更新于 10-28 16:14

技能介绍

该技能是一份 TypeScript 最佳实践规则集,主要用于在 Pstack 任务中编写类型、处理验证边界、设计可辨识联合和公共 API 时参考。使用前需先应用 /pstack-principle-type-system-discipline 原则。

用途与定位:资料以规则与摘要形式列出多项 TypeScript 类型设计约定,目标是让非法状态和非法值在类型层面难以表示或构造,并把外部数据的校验集中在边界处。

主要规则:

  • 可辨识联合:用 kind 字面量判别符建模变体,避免可选字段堆叠导致不可能状态可被表示。
  • 品牌类型:用 & { readonly __brand: "X" } 为原始类型加品牌,防止混用,并在边界处校验一次。
  • 构造式建模:通过类型形状使非法值无法构造,例如 [T, ...T[]] 表示非空、[T, T][] 表示偶数长度;数值范围约束仍需边界校验。
  • 最简总类型:在所有操作保持完整时保留 T[],仅当松散类型迫使使用 !、类型断言或“不应发生”抛错时,才强化为 NonEmpty<T>。
  • unknown 优于 any:外部数据视为 unknown。
  • schema 先于守卫:手写逐属性类型守卫前,优先使用仓库的运行时 schema 库并从 schema 推断类型,如 z.infer。
  • 避免未校验断言:不用绕过校验的断言;as const 保留字面量类型,经校验的构造函数可断言品牌。
  • 收窄层级:判别式 switch > in 运算符 > typeof/instanceof > 用户定义类型守卫 > as。
  • 类型守卫必须验证其声明;命名用 isX 或 hasX。
  • 穷尽性:在 default 分支内联 const _exhaustive: never = x; 使新增变体时编译器报错。
  • satisfies 优于 as:检查符合性但不把值标注为目标类型。
  • 边界校验:数据进入处解析为命名领域类型,Record<string, unknown> 止于该解析,内部信任类型;参见 /pstack-principle-boundary-discipline。
  • schema 派生类型:声明新接口前先用 Pick/Omit/Parameters/ReturnType/Awaited/typeof。
  • 对象参数:传对象而非位置参数,使参数顺序自文档化;热路径(逐帧渲染、分词器、解析器)可跳过。
  • 真实测试:能运行的不模拟,优先使用框架真实测试原语并检查泄漏/可释放性,在运行构建中验证 UI,仅模拟本地无法运行的部分。
  • 结构化遥测:优先使用带足够上下文的结构化日志,便于按 id 调试;发布代码中不用 console.log。

使用方式:资料未提供安装命令或调用步骤,仅说明在 Pstack 任务中编写相关 TypeScript 代码时作为规则参考应用,并先应用前置原则。示例位于 references/patterns.md。

适用场景:TypeScript 类型建模、边界数据校验、可辨识联合设计、公共 API 类型约束、类型守卫与测试/日志约定。

限制:资料为规则摘要,未提供具体安装、配置、平台支持或价格信息,这些内容暂未提供。