2014-11-11 4 views
32

Ich erstelle eine TypeScript-Definitionsdatei für eine js-Bibliothek eines Drittanbieters. Eine der Methoden ermöglicht ein Optionsobjekt, und eine der Eigenschaften des Optionsobjekts akzeptiert eine Zeichenfolge aus der Liste: "collapse", "expand", "end-expand" und "none".So fordern Sie eine bestimmte Zeichenfolge in der TypeScript-Schnittstelle an

Ich habe eine Schnittstelle für die Optionen Objekt:

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

Kann die Schnittstelle dies erzwingen, wenn Sie also ein IOptions Objekt mit der brace_style Eigenschaft umfassen, wird es nur eine Zeichenfolge ermöglichen, die in der zulässigen Liste ?

+2

Bitte besuchen Sie die Antworten auf diese Frage – Andreas

Antwort

62

Dies wurde in der Version 1.8 als „string freigegeben wörtliche Typen“

What's New in Typescript - String Literal Types

Beispiel von der Seite:

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

Dies ist die richtige Antwort jetzt abstimmen nach oben – BradStell

4

Vielleicht nicht genau das, was Sie wollten, aber Enum s scheinen wie eine perfekte Lösung für Sie.

enum BraceStyle {Collapse, Expand, EndExpand, None} 

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

Enums sind jedoch nummeriert. Dies bedeutet, dass während der Laufzeit ein reeller Wert für z.B. BraceStyle.Collapse wird in diesem Fall 0 sein. Aber Sie können sie mit anderen, auch Nicht-Typoskripten verwenden, da sie zu Objekten kompilieren. Dies ist, wie BraceStyle aussehen wird nach kompilieren & Lauf:

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

Wenn Sie Strings statt wollen, können Sie eine Klasse mit statischen Mitglieder nutzen können, wie here beschrieben

1

Eine andere Möglichkeit ist, wie etwas zu tun ist:

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

Versuchen Sie, diese

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

export interface IReadings { 
    param:ReadingTypes 
} 
Verwandte Themen