Jeśli zmienię StatusTypes na wyliczenie, pojawi się błąd. Zachowuję StatusTypes jako obiekt, więc mogę go konsekwentnie stosować w mojej aplikacji, np. StatusTypes.success

export const StatusTypes = {
  idl: {name: 'idle', message: ''},
  success: {name: 'success', message: 'Success.'},
  error: {name: 'error', message: 'Something went wrong.'},
};

export type Status =
  | {name: 'idle'; message: ''}
  | {name: 'success'; message: 'Success.'}
  | {name: 'error'; message: 'Something went wrong.'};

Jak sprawić, by tekst Status był bardziej zwięzły bez powielania kodu, jak powyżej?

0
karolis2017 14 marzec 2020, 19:06

2 odpowiedzi

Najlepsza odpowiedź

Myślę, że lepszym podejściem byłoby ustawienie klucza name jako wyliczenia, a następnie pozostawienie wiadomości jako prostego ciągu (ponieważ komunikat o błędzie powinien być inny dla każdego innego błędu)

Coś takiego:

export type Status = {
  name: "idle" | "success" | "error"
  message: string
}

const StatusTypes: { idle: Status; success: Status; error: Status } = {
  idle: { name: "idle", message: "..." },
  success: { name: "success", message: "..." },
  error: { name: "error", message: "..." },
}
0
ulentini 14 marzec 2020, 17:19

Domyślam się, że chcesz mieć jakieś predefiniowane obiekty statusu, co powiesz na coś takiego:

export class Status {
    static idle = new Status('idle', '');
    static success = new Status('success', 'Success.');
    static error = new Status('error', 'Something went wrong.');

    constructor(
        public readonly name: 'idle' | 'success' | 'error',
        public readonly message: string,
    ){}
}
0
Christoph Lütjen 14 marzec 2020, 16:16