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

如何优化TypeScript中对象键与值字符串关联的两步验证?

解决方案:用泛型函数实现精准约束与错误提示

核心思路

通过泛型函数创建对象,利用泛型参数捕获每个键值对的具体类型,同时在函数参数的类型约束中强制每个值必须包含对应的键名。这种方式无需拆分声明步骤,且IDE能直接在错误的键值对位置高亮提示。

代码实现

// 定义泛型创建函数
const createSectionFragments = <T extends Record<`Dato${string}SectionFragment`, string>>(
  fragments: { [K in keyof T]: `${string}${K & string}${string}` }
): T => fragments;

// 测试用的片段字符串
const DatoButtonColumnSectionFragment = "fragment DatoNotSameKeyFragment {}"; // 此处IDE会直接标红报错
const DatoCatalogSectionFragment = "fragment DatoCatalogSectionFragment {}";

// 一步完成对象声明与验证
const SectionFragments = createSectionFragments({
  DatoButtonColumnSectionFragment,
  DatoCatalogSectionFragment,
});

方案优势

  • 简化代码:无需中间变量,一次完成声明与验证
  • 精准错误提示:IDE会直接在不符合要求的键值对(如DatoButtonColumnSectionFragment)上标红,明确指出问题所在
  • 保留类型信息:泛型函数的返回类型会保留原始的字面量类型,不会丢失类型精度

原方案的问题分析

原方案通过两次satisfies拆分声明,错误只会在第二步的变量上整体报错,IDE无法定位到具体的错误键;同时额外的中间变量增加了代码复杂度。

内容的提问来源于stack exchange,提问作者Thiago Pereira Maia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:42:11