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

未知所有判别器值时,如何收窄TypeScript可辨识联合类型?

TypeScript可辨识联合类型中UnknownError的类型定义问题

假设某库返回的所有错误均包含name: string;字段。已知:

  • KnownErrorOne的name固定为'KnownError',且包含knownErrorSpecific: string字段
  • KnownErrorTwo的name固定为'WarpDriveError',且包含warpCoreTemperature: number字段

但无法预知所有可能的错误名称。这看起来是可辨识联合类型的适用场景,但由于UnknownError的name是宽泛的string类型,基于name字段进行类型收窄时,无法排除UnknownError的可能性:

type UnknownError = {
    name: string;
};

type KnownErrorOne = {
    name: 'KnownError';
    knownErrorSpecific: string;
};

type KnownErrorTwo = {
    name: 'WarpDriveError';
    warpCoreTemperature: number;
};

type GeneralError = KnownErrorOne | KnownErrorTwo | UnknownError;

const handleError = (err: GeneralError) => {
    if(err.name === 'KnownError' as const){
        console.log(err.knownErrorSpecific);
        // 此处err仍可能是KnownErrorOne或UnknownError
    }
};

我设想的解决方案是将UnknownError.name定义为除已知错误名称外的任意字符串,比如类似Omit<string, "KnownError" | "WarpDriveError">的类型。请问这种方案是否可行?

目前我可以通过if( 'knownErrorSpecific' in err )的方式临时解决类型收窄问题,但希望了解上述基于name字段的解决方案是否可行,以备后续遇到类似场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:03:35