2014-11-11 16 views
32

Sto creando un file di definizione TypeScript per una libreria js di terze parti. Uno dei metodi consente un oggetto opzioni e una delle proprietà dell'oggetto opzioni accetta una stringa dall'elenco: "collapse", "expand", "end-expand" e "none".Come richiedere una stringa specifica nell'interfaccia TypeScript

ho un'interfaccia per le opzioni oggetto:

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

l'interfaccia può far rispettare questo, quindi se si include un oggetto IOptions con la proprietà brace_style, consentirà solo una stringa che è nella lista accettabile ?

+2

Si prega di rivisitare le risposte a questa domanda – Andreas

risposta

62

Questo è stato rilasciato nella versione 1.8 come "stringa letterale tipi"

What's New in Typescript - String Literal Types

esempio dalla pagina:

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

Questa è la risposta corretta ora, fino al voto top – BradStell

4

Forse non esattamente quello che volevi, ma Enum s sembra una soluzione perfetta per te.

enum BraceStyle {Collapse, Expand, EndExpand, None} 

interface IOptions { 
    indent_size?: number; 
    indent_char?: string; 
    brace_style?: BraceStyle 
} 

Le enumerazioni sono, tuttavia, basate sul numero. Significa che durante il runtime un valore reale per es. BraceStyle.Collapse sarà 0 in questo caso. Ma puoi usarli con altri script, anche non a dattiloscritto, dal momento che vengono compilati sugli oggetti. Questo è il modo BraceStyle cercherà dopo la compilazione & run:

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

Se volete stringhe, invece, è possibile utilizzare una classe con membri statici, come descritto here

1

Un'altra possibilità è quella di fare qualcosa di simile:

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

Prova questa

export type ReadingTypes = 'some'|'variants'|'of'|'strings'; 

export interface IReadings { 
    param:ReadingTypes 
} 
Problemi correlati