if и далее typescript теряет контекст (не понимает какой тип). Без деструктуризации все работает великолепно.
type Success<Result> = {
status: 'success';
result: Result;
}
type Fail = {
status: 'fail';
message: string;
}
export function handle<Result>(
response: Success<Result> | Fail,
): Result | never {
if (response.status === 'fail') {
throw new Error(response.message);
}
return response.result;
}
export function handleWithDestruct<Result>(
response: Success<Result> | Fail,
): Result | never {
const { status } = response;
if (status === 'fail') {
throw new Error(response.message); // error: Property 'message' does not exist on type 'Fail | Success<Result>'. Property 'message' does not exist on type 'Success<Result>'.
}
return response.result;
}
Ссылка не работает.
Обсуждают сегодня