2016-03-30 45 views
0

'da bir dize ve dize dizisini parametre olarak kabul etme Bu konuda gitmenin en iyi yolunu bulmaya çalışıyorum. Bir kütüphaneyi yazıya dönüştürüyorum ve daha önce yaşadığım belirli bir konuya koşuyorum. tanım sorunu tip (string | string[]) ait olduğu için bir diziye yol parametresini dönüştürmek olamaz buTypescript

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

biraz benzemekle olan bir işlevi yoktur. Bunu yapmaya çalışmak da başarısız oluyor.

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

Çünkü yol tipi (string | string[]) ait olup string[] yazmanız atanamaz. Herhangi bir çözüm?

+0

'yol: any' - daha sonra denetimi yapıyor musunuz? – tymeJV

+0

@tymeJV 'any' kirli hissettiriyor ve bu tip ipucu söz konusu olduğunda herhangi bir yardım sunmuyor – watzon

cevap

0

Aslında bunu çözdüm. Typecasting'de yerleşik Typescript'leri kullanırsanız oldukça basit bir çözüm.

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

Ve bom! type guards kullanarak tipi iddialarını (döküm) kullanmadan Aslında yapabilirsiniz Hata yok

0

: Bu örnekte

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

, typescript yüzden, eğer bloğunun içinde string | string[] sadece string den path türünü daraltır tip iddiasına ihtiyacınız yok.