如何键入具有条件存在成员的替代类型?
How do I type an alternate type with conditionally existent members?
我有一个 API returns 这种类型的结果:
{ "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) 才能使布尔属性上的可区分联合起作用。
我有一个 API returns 这种类型的结果:
{ "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) 才能使布尔属性上的可区分联合起作用。