1
votes

TypeScript resuse les littéraux de chaîne?

Existe-t-il un moyen de réutiliser des chaînes littérales pour ne pas copier / coller? quelque chose comme ceci:

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

interface IProps {
    sendingState: SendingStates.sendingStates
}

En gros, je veux avoir accès au type 'sendStates' dans plusieurs classes - merci!


1 commentaires

Vous ne pouvez pas créer un fichier AppConstants.ts et exporter JSON contenant des clés? Ensuite, vous pouvez importer ce fichier partout où vous souhaitez utiliser cette constante.


4 Réponses :


0
votes

Vous pouvez utiliser un enum mais il existe un bien meilleur moyen pour ce cas appelé chaîne littérale :

type StringLiteral = '1er littéral' | «2e littéral» | 'nième littéral';

Cela vous donnera la saisie semi-automatique de l'éditeur ainsi que des erreurs de compilation. Comme pour tous les types, vous pouvez l'exporter pour une réutilisation ultérieure.


0 commentaires

2
votes

Vous pouvez utiliser typeof pour réutiliser le type:

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

export class SendingStates {
    public static sendingStates: sendingStateType
}

interface IProps {
    sendingState: sendingStateType
}

Ou vous pouvez créer un alias de type:

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

interface IProps {
    sendingState: typeof SendingStates.sendingStates
}


1 commentaires

le type sera également exporté pour l'exposer à d'autres fichiers.



1
votes

C'est possible en définissant un type :

interface IProps {
    sendingState: AVAILABLE_SENDING_STATES
}

Ensuite, utilisez-le où vous voulez comme type:

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


0 commentaires

0
votes

Vous pouvez utiliser Enum .

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

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

interface IProps {
    sendingState: SENDING_STATES
}


0 commentaires