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

TypeScript条件类型报错:{ error: false; }无法赋值给类型x的原因

问题分析与解决

错误原因

你自定义的Error接口和JavaScript内置的Error类型重名了。TypeScript会将这个自定义接口视为对内置Error类型的扩展,而内置Error包含name和message两个必填属性。因此ErrorWithMessage2继承后,被要求必须包含这两个属性,而你的对象{ error: false }缺少它们,导致类型不匹配报错。

解决方案

重命名自定义的基础接口,避免和内置Error冲突,再重新定义联合类型即可实现需求:

// 重命名基础接口,避开内置Error
interface BaseError { error: boolean; }

interface ErrorWithMessage extends BaseError { 
  error: true; 
  errorMessage: string; 
}

interface ErrorWithMessage2 extends BaseError { 
  error: false; 
  errorMessage?: string; 
}

type x = ErrorWithMessage | ErrorWithMessage2;

// 符合要求,无报错
const abc: x = { error: false };

// 测试error为true的情况,必须传入errorMessage
const errorCase: x = { error: true, errorMessage: "操作失败" };

验证逻辑

  • 当error: true时,TS会自动推断为ErrorWithMessage类型,强制要求传入errorMessage
  • 当error: false时,TS推断为ErrorWithMessage2类型,errorMessage可选,甚至可以不提供

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:13