如何键入具有条件存在成员的替代类型?



我有一个API返回这种类型的结果:

{ "success": true, "result": {} } // on success
{ "success": false, "message": "Nope!" } // on failure

我尝试创建一个替代类型,像这样:

interface ResultSuccess<T> {
success: true;
result: T;
}
interface ErrorMessage {
success: false;
message: string;
}
type Maybe<T> = ResultSuccess<T> | ErrorMessage;
function HandleAPICall(response: Maybe<APIResult>) {
if (response.success) {
DoSomething(response.result);
} else {
console.log(response.message);
}
}

然而,在console.log语句上,我得到了这样的错误:

Error   TS2339  (TS) Property 'message' does not exist on type 'Maybe<APIResult>'.
Property 'message' does not exist on type 'ResultSuccess<number>'.
maybe.ts   15  Active

如何从Maybe中获得ErrorMessage ?

您需要在您的tsconfig.json中启用strictNullChecks(docs),以使布尔属性的区分联合工作

最新更新