2015-03-01 12 views
6

Ich vermisse hier wahrscheinlich etwas albern. Ich dachte, der Tupel Typ [string, number] zu grob äquivalent war den Array-of-Union-Typ (string | number)[], und dass die folgende war daher legal:Tuple Typ vs. Array-of-Union-Typ

function lengths (xs: string[]): [string, number][] { 
    return xs.map((x: string) => [x, x.length]) 
} 

jedoch tsc 1.4 klagt:

Config.ts(127,11): error TS2322: Type '(string | number)[][]' is not assignable to type '[string, number][]'. 
    Type '(string | number)[]' is not assignable to type '[string, number]'. 
    Property '0' is missing in type '(string | number)[]'. 

Was soll ich tun falsch?

Antwort

5

Diese Antwort mit freundlicher Genehmigung von Daniel Rosenwasser. Sie können das gewünschte Verhalten erhalten, indem Sie Ihrem Lambda einen Rückgabetyp geben.

function lengths(xs: string[]): [string, number][] { 
    return xs.map((x): [string, number] => [x, x.length]); 
} 

Weitere Informationen here.