TypeScript повторно использовать строковые литералы? - PullRequest
1 голос
/ 10 апреля 2020

Есть ли способ повторно использовать строковые литералы, чтобы я не копировал / вставлял? что-то вроде этого:

export class SendingStates {
    public static sendingStates: 'waiting' | 'sending' | 'sent' | 'error' | 'input-error'
}

interface IProps {
    sendingState: SendingStates.sendingStates
}

По сути, я хочу иметь доступ к типу 'sendStates' в нескольких классах - спасибо!

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Вы можете использовать typeof для повторного использования типа:

export class SendingStates {
    public static sendingStates: 'waiting' | 'sending' | 'sent' | 'error' | 'input-error'
}

interface IProps {
    sendingState: typeof SendingStates.sendingStates
}

Или вы можете создать псевдоним типа:

type sendingStateType = 'waiting' | 'sending' | 'sent' | 'error' | 'input-error'

export class SendingStates {
    public static sendingStates: sendingStateType
}

interface IProps {
    sendingState: sendingStateType
}
1 голос
/ 10 апреля 2020

Это возможно, определив type:

export type AVAILABLE_SENDING_STATES = 'waiting' | 'sending' | 'sent' | 'error' | 'input-error';

Затем используйте его в качестве типа:

interface IProps {
    sendingState: AVAILABLE_SENDING_STATES
}
0 голосов
/ 10 апреля 2020

Вы можете использовать Enum.

https://www.typescriptlang.org/docs/handbook/enums.html

enum SENDING_STATES {
    WAITING = "WAITING",
    SENDING = "SENDING"
}

interface IProps {
    sendingState: SENDING_STATES
}
0 голосов
/ 10 апреля 2020

Вы можете использовать enum, но есть гораздо лучший способ для этого случая, который называется string literal:

type StringLiteral = '1st literal' | '2nd literal' | 'nth literal';

Это даст вам автозаполнение и компиляцию редактора. ошибки времени Как и для всех типов, вы можете экспортировать его для дальнейшего повторного использования.

...