Код IT
← Каталог

Типы данных и типизация в TypeScript — `Exclude`, `Extract` и `NonNullable`

Фрагмент из «Типы данных и типизация в TypeScript»: `Exclude`, `Extract` и `NonNullable`.

TypeScript main.ts
type OkResponse = { status: "ok"; data: unknown };
type ValidationErrorResponse = {
  status: "validation_error";
  fields: string[];
};
type ServerErrorResponse = { status: "server_error"; code: number };

type ApiResponse =
  | OkResponse
  | ValidationErrorResponse
  | ServerErrorResponse;

type ErrorResponse = Exclude<ApiResponse, OkResponse>;
// ValidationErrorResponse | ServerErrorResponse

function logError(e: ErrorResponse): string[] | number {
  if (e.status === "validation_error") {
    return e.fields;
  }
  return e.code;
}
type OkResponse = { status: "ok"; data: unknown };
type ValidationErrorResponse = {
  status: "validation_error";
  fields: string[];
};
type ServerErrorResponse = { status: "server_error"; code: number };

type ApiResponse =
  | OkResponse
  | ValidationErrorResponse
  | ServerErrorResponse;

type ErrorResponse = Exclude<ApiResponse, OkResponse>;
// ValidationErrorResponse | ServerErrorResponse

function logError(e: ErrorResponse): string[] | number {
  if (e.status === "validation_error") {
    return e.fields;
  }
  return e.code;
}