2016-03-30 8 views
0

Ich versuche, den besten Weg, um darüber zu gehen, herauszufinden. Ich konvertiere eine Bibliothek in Typoskript und stoße auf ein bestimmtes Problem, das ich zuvor hatte. Es gibt eine Funktion, die Definition ein bisschen wie diesesAkzeptieren einer Zeichenfolge und ein Zeichenfolgenarray als Parameter in Typescript

public execute(path: string | string[]): Promise<Object> { 
    if (typeof path == "string") { 
    // Turn the string into an array 
    } 
} 

sieht Das Problem ist, ich nicht den Pfad Parameter in ein Array umwandeln kann, da sie von der Art (string | string[]) ist. Auch dies zu versuchen, scheitert.

public execute(path: string | string[]): Promise<Object> { 
    newPath: string[]; 
    if (typeof path == "string") { 
    newPath = [path]; 
    } else { 
    newPath = path; 
    } 
} 

Da Pfad ist vom Typ (string | string[]) und nicht zugeordnet werden kann string[] eingeben. Irgendwelche Lösungen?

+0

'pfad: any' - dann die überprüfung? – tymeJV

+0

@tymeJV 'any' fühlt sich schmutzig an und bietet keine Hilfe, wenn es um Typhinweis geht – watzon

Antwort

0

Ich habe es gerade herausgefunden. Ziemlich einfache Lösung, wenn Sie Typecripts in Typecasting verwenden.

public execute(path: string | string[]): Promise<Object> { 
    if (typeof path == "string") { 
    path = <string[]>[path]; 
    } 
} 

Und Boom! Keine Fehler

0

Sie können dies tatsächlich tun, ohne Art Behauptungen mit (Gießen), mit type guards:

public execute(path: string | string[]): Promise<Object> { 
    let newPath: string[]; 
    if (typeof path === "string") { 
    newPath = [path]; 
    } else { 
    newPath = path; 
    } 
} 

In diesem Beispiel verengt Typoskript die Art der path von string | string[] nur string innerhalb des if-Block, so Sie benötigen keine Typassertion.

Verwandte Themen