{"answer":"编写类型安全的 TypeScript,合理运用类型收窄、推断模式与严格模式最佳实践。"}
User 需要 TypeScript 的专业知识—— 从基本的打字到高级的通用字是一项面向实际任务的技能,主要用于代理处理类型缩小、 推断、 歧视性结合和严格的模式模式;@ label Reference.。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
用户需要 TypeScript 专业知识——涵盖基础类型标注到高级泛型。Agent 可处理类型收窄(narrowing)、类型推断、可辨识联合(discriminated unions)以及严格模式(strict mode)下的常见模式。
| 主题 | 文件 |
|---|---|
| 泛型模式 | generics.md |
| 工具类型 | utility-types.md |
| 声明文件 | declarations.md |
| 从 JavaScript 迁移 | migration.md |
anyunknown 强制你在使用前进行类型收窄;而 any 会静默破坏类型安全性unknown,切勿使用 anyunknown,而不是 anyfilter(Boolean) 不会触发类型收窄 — 应改用 .filter((x): x is T => Boolean(x))Object.keys(obj) 返回 string[],而非 keyof typeof obj — 这是设计使然,因为对象可能包含额外属性Array.isArray() 将类型收窄为 any[] — 若需精确元素类型,可能需手动类型断言in 操作符可实现收窄,但仅当目标属性**恰好只存在于联合类型的某一个分支中**时才有效let x = "hello" 的类型是 string — 如需字面量类型,请使用 const 声明或后缀 as const{ status: "ok" } 中的 status 类型为 string — 请使用 as const 或显式类型注解fn() 无法推断,应传入具体值或显式标注类型type 或 kind 字段 — 以支持穷尽性 switch 检查default: const _never: never = x — 若遗漏任一 case,将触发编译错误satisfies 与类型注解的区别const x: Type = val 会将 val 宽展(widen)为 Type — 丢失字面量信息const x = val satisfies Type 在保留字面量类型的同时验证兼容性 — 配置对象等场景下推荐使用?. 返回 undefined,而非 null — 这在对接期望 null 的 API 时尤为关键?? 仅捕获 null 和 undefined;而 || 会捕获所有 falsy 值(包括 0 和 "")! 应作为最后手段 — 优先考虑类型收窄或提前返回import type — 该语法在运行时被完全移除,可规避打包器相关问题export type { X } — 防止意外引入运行时依赖.d.ts 文件做模块增强时,请使用 declare module 并指定**精确的模块路径**