2015-03-01 9 views
6

Prawdopodobnie brakuje mi tutaj czegoś głupiego. Myślałem typ krotka [string, number] była grubsza odpowiednikiem array-of-Union Typ (string | number)[] i że następuje zatem prawna:Typ kumulatu a tablica typu unii

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

Jednak TSC 1,4 narzeka:

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)[]'. 

Co robię źle?

Odpowiedz

5

Ta odpowiedź dzięki uprzejmości Daniela Rosenwassera. Możesz uzyskać pożądane zachowanie, podając swój typ zwrotny lambda.

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

Więcej informacji here.