SwiftRelay

← All sprint notes

哪个模型最擅长处理泛型:六步选出可靠助手

Model splitsZH

哪个模型最擅长处理 TypeScript 泛型?没有实际运行过同一组测试,就不宜宣布冠军。更实用的选择标准是:模型能否保留输入与输出的类型关系,拒绝错误调用,并在修改后继续满足原有约束。下面按六步完成一次可复用的选型。

第一步:把泛型需求写成验收条件

先选一个真实任务,例如根据字段名读取对象属性。要求模型保留具体返回类型,而不是把所有结果合并成宽泛类型。泛型的价值在于表达类型之间的对应关系,不只是让函数接受更多输入。([typescriptlang.org](https://www.typescriptlang.org/docs/handbook/2/generics.html?utm_source=openai))

把验收条件写清楚:正确字段可以读取,不存在的字段必须报错,调用者不需要额外声明结果类型。这样比较的是同一道题,而不是模型各自挑选的简单案例。

第二步:固定提示词和编译环境

建议给候选模型完全相同的代码、编译器版本和严格检查配置。提示词可以直接写成:“请修复泛型签名,保留现有调用方式,提供合法调用与非法调用,并解释每个约束的作用。”

不要向其中一个模型透露参考答案,也不要只给另一个模型残缺的报错信息。将首次回答与追问后的修复分别记录,避免把人工提示的贡献算成模型能力。

第三步:检查约束是否真正保护调用者

继续测试对象键与返回值的关联。官方泛型文档展示了通过键约束限制属性访问的做法:被选择的键必须属于目标对象。重点不是模型是否用了复杂写法,而是错误字段能否被拒绝。([typescriptlang.org](https://www.typescriptlang.org/docs/handbook/2/generics.html?utm_source=openai))

  • 补充一个不存在的字段,检查是否出现预期错误。
  • 分别读取文字字段与数字字段,检查结果是否保持区别。
  • 要求解释约束,检查解释是否与实际签名一致。

第四步:用条件类型测试推理边界

基础题通过后,再要求模型编写提取数组元素类型的工具,并说明输入为联合类型时会怎样。条件类型支持在匹配过程中推断类型,也存在对联合类型逐项分配的行为。([typescriptlang.org](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html?from=20421&from_column=20421&utm_source=openai))

接着追问:“如果需要把整个联合类型作为一个整体判断,应该怎样调整?”官方文档给出了用方括号包裹判断两侧、避免分配的方式。能否解释这一变化,比单独背出工具类型更值得观察。([typescriptlang.org](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html?from=20421&from_column=20421&utm_source=openai))

第五步:让编译结果推翻漂亮答案

不要把“示例能够运行”当作类型正确的证明。泛型会在编译时被擦除,因此还需要单独检查编译阶段的约束,而不能只验证运行结果。([github.com](https://github.com/microsoft/typescript/wiki/faq?utm_source=openai))

建议同时保留正例和反例。官方支持预期错误注释:如果对应代码没有产生错误,编译器反而会提示该注释多余。这样可以检查模型是否为了消除报错而放松限制。([typescriptlang.org](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html?utm_source=openai))

第六步:按泛型修复质量决定主力模型

建议按四项记录结果:正确调用是否通过、错误调用是否被拒绝、推断结果是否精确、修改是否容易维护。这里没有预设冠军:在你的题集上满足这些条件、且较少依赖人工纠正的模型,才是更合适的主力。

如果希望集中比较候选模型,可以注册 SwiftRelay,用新账户的小额赠送额度开始验证。它按词元用量计费,适合先做小范围试题,再根据实际账单决定是否扩大测试。

最终应选择能守住类型边界的模型,而不是最会解释泛型的模型。把测试题、提示词和编译结果一起保存,下次更换模型时重复检查,选型就有了可追溯的依据。

Keep reading

Back for another lap?Log in