未知所有判别器值时,如何收窄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
相关产品推荐
相关产品推荐

