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
相关产品推荐
相关产品推荐

