You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TypeScript类型导出为对象以展示可用键列表

在TypeScript中实现自动生成邮件参数映射的方案

可以实现,核心思路是让运行时参数列表和TypeScript类型保持同步——因为TypeScript的接口/类型仅存在于编译阶段,无法直接从类型生成运行时对象,所以我们先定义运行时的参数列表,再基于它推导对应的类型,后续增删邮件类型时只需修改一处即可。

实现代码

export type CustomEmailPayload = Record<string, string>;

// 1. 定义基础字段的运行时数组
const baseLessonFields = ['teacherGivenName', 'lessonDate'] as const;

// 2. 定义各邮件类型的额外字段
const reminderExtraFields = ['chatUrl'] as const;
const followUpExtraFields = ['reviewYourTeacherUrl'] as const;

// 3. 生成最终的参数映射对象(直接给非技术人员用)
export const emailTemplateParamsMap = {
  Reminder: [...baseLessonFields, ...reminderExtraFields],
  FollowUp: [...baseLessonFields, ...followUpExtraFields],
} as const;

// 4. 从运行时数组推导对应的Payload类型
type ExtractPayload<T extends readonly string[]> = Record<T[number], string> & CustomEmailPayload;

// 5. 生成最终的EmailTemplateParameters类型(和原类型完全一致)
export type EmailTemplateParameters = {
  [K in keyof typeof emailTemplateParamsMap]: ExtractPayload<typeof emailTemplateParamsMap[K]>;
};

后续维护说明

  • 新增邮件类型:比如要加Feedback类型,只需在emailTemplateParamsMap中新增键值对,同时定义对应的额外字段数组即可,类型会自动推导。
  • 删除邮件类型:直接从emailTemplateParamsMap中删除对应的键即可,类型也会同步更新。

这样既保证了TypeScript类型的正确性,又能自动生成非技术人员需要的参数列表,无需手动维护两份内容。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:42:11