TypeScript 类型体操:如何为 SDK 编写优雅的类型定义
作者:互联网
2026-04-12
背景
作为一款 SDK,提供完善的 TypeScript 类型定义(.d.ts)是对用户最基本的尊重。 AutoForm 的配置项非常复杂,且存在很多联动关系。如何用 TS 准确描述这些关系?
今天带大家做一套类型体操。
挑战一:互斥属性
如果配置了 mode: 'auto',则 interval 必填;如果 mode: 'manual',则 interval 不可填。
错误写法:
interface Config {
mode: 'auto' | 'manual';
interval?: number;
}
正确写法(Discriminated Unions):
type AutoConfig = {
mode: 'auto';
interval: number;
};
type ManualConfig = {
mode: 'manual';
interval?: never; // 关键:禁止出现
};
type Config = AutoConfig | ManualConfig;
挑战二:事件回调的类型推导
我们希望用户在事件时,能自动推导出 event 对象的类型。
sdk.on('success', (e) => {
console.log(e.data); // e 应该是 SuccessEvent
});
sdk.on('error', (e) => {
console.log(e.message); // e 应该是 ErrorEvent
});
实现:
type EventMap = {
success: { any };
error: { message: string; code: number };
};
class SDK {
onextends keyof EventMap>(
type: K,
handler: (event: EventMap[K]) => void
) {
// ...
}
}
挑战三:深度 Partial
用户配置时,通常只需要覆盖默认配置的一部分。我们需要一个递归的 Partial。
type DeepPartial = {
[P in keyof T]?: T[P] extends object ? DeepPartial : T[P];
};
总结
TypeScript 不仅仅是类型检查工具,更是最好的文档。写好类型定义,能让用户在使用 SDK 时获得极致的智能提示体验,减少查阅文档的时间。
官网地址:51bpms.com
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
AI 时代掌握 Markdown,是最基础也最必要的技能 (小红书长文也可以用哦)
04/18
anthropic-academy:工具使用(一)
04/18
别把 AI 当神:它甚至不知道这行代码为什么能跑
04/18
前端将死,Agent 永生
04/18
Agno 开发教程(十一):深入理解与实践 Skills(技能)
04/18
用 OpenClaw 做视频:播放量从几十涨到 9000,成本一毛钱
04/18
Claude、Codex、Trae... 都在做:为什么 "Skill" 成了 AI 编程工具的标配?
04/18
谁说参数即正义?10B小钢炮Step3-VL硬刚千亿巨头
04/18
AI 编程时代的工作流
04/18
一天一个开源项目(第23篇):PageLM - 开源 AI 教育平台,把学习材料变成互动资源
04/17
AI精选
