Comment exiger une chaîne spécifique dans l’interface TypeScript

Je crée un fichier de définition TypeScript pour une bibliothèque js tierce. L’une des méthodes autorise un object options et l’une des propriétés de l’object options accepte une chaîne de la liste: "collapse" , "expand" , "end-expand" et "none" .

J’ai une interface pour l’object options:

 interface IOptions { indent_size?: number; indent_char?: ssortingng; brace_style?: // "collapse" | "expand" | "end-expand" | "none" } 

L’interface peut-elle appliquer cela, donc si vous incluez un object IOptions avec la propriété brace_style , cela n’autorisera qu’une chaîne qui figure dans la liste acceptable?

Cela a été publié dans la version 1.8 en tant que “types littéraux de chaîne”

Quoi de neuf dans Typescript – Types de littéraux de chaîne

Exemple de la page:

 interface AnimationOptions { deltaX: number; deltaY: number; easing: "ease-in" | "ease-out" | "ease-in-out"; } 

Essaye ça

 export type ReadingTypes = 'some'|'variants'|'of'|'ssortingngs'; export interface IReadings { param:ReadingTypes } 

Peut-être pas exactement ce que vous vouliez, mais Enum semble être une solution parfaite pour vous.

 enum BraceStyle {Collapse, Expand, EndExpand, None} interface IOptions { indent_size?: number; indent_char?: ssortingng; brace_style?: BraceStyle } 

Les énumérations sont toutefois basées sur le nombre. Cela signifie que pendant l’exécution, une valeur réelle pour, par exemple, BraceStyle.Collapse sera 0 dans ce cas. Mais vous pouvez les utiliser avec d’autres scripts, même non typés, car ils sont compilés en objects. Voici comment BraceStyle s’occupera de la compilation et de l’exécution:

 { 0: "Collapse", 1: "Expand", 2: "EndExpand", 3: "None", Collapse: 0, Expand: 1, EndExpand: 2, None: 3 } 

Si vous voulez des chaînes à la place, vous pouvez utiliser une classe avec des membres statiques, comme décrit ici

Une autre possibilité est de faire quelque chose comme:

 /** Your comments here that you want to show up * highlight instances of this in your code */ export interface YourSsortingng { [index: number]: ssortingng; }