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

TypeScript泛型函数中枚举结合条件类型报错问题排查

错误原因分析:TypeScript泛型条件类型中的枚举赋值问题

你的代码回顾

枚举定义:

export enum FactoryResult {
  INTERNAL_FORMALITY_CREATED_WITH_DOCS,
  INTERNAL_FORMALITY_INVALID_DOCS,
  INTERNAL_FORMALITY_MISSING_DOCS,
}

函数代码:

public fromData<T extends FactoryResult>(
  data: FormalityCreationDTO,
  filesAttachments: FileAttachment[],
): {
  factoryResult: T;
  formality: T extends FactoryResult.INTERNAL_FORMALITY_MISSING_DOCS ? never : Formality;
  invalidDocuments: T extends FactoryResult.INTERNAL_FORMALITY_MISSING_DOCS ? never : FileAttachment[];
} {
   if (filesAttachments.length < NumberOfFilesRequiredForCreation.TEST) {
  return {
    factoryResult: FactoryResult.INTERNAL_FORMALITY_MISSING_DOCS, // <= 报错位置
  };
// ...其他分支
}}

错误核心原因

  1. 泛型参数的控制权在调用者
    你定义的泛型T extends FactoryResult,意味着调用该函数时,调用者可以指定T为FactoryResult中的任意枚举成员。比如调用者可能写:

    fromData<FactoryResult.INTERNAL_FORMALITY_CREATED_WITH_DOCS>(data, files)
    

    此时函数的返回类型要求factoryResult必须是INTERNAL_FORMALITY_CREATED_WITH_DOCS,但你在分支里硬返回了INTERNAL_FORMALITY_MISSING_DOCS,这就违反了泛型约定,TypeScript会抛出类型不匹配的错误。

  2. never类型的误用
    你试图用never表示不需要返回的属性,但TypeScript中never类型的属性是不允许存在的,而不是可以省略。当T不是INTERNAL_FORMALITY_MISSING_DOCS时,返回的对象必须包含formality和invalidDocuments,否则也会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:17:04