Géppel: nem lehet írni heterogén tömb literálok

szavazat
13

milyen arra hivatkozik, nem nekem kell, hogy ezt lefordítani?

class Foo {}
class Bar {}

var f =
[
    [Foo, [1, 2, 3]],
    [Bar, [7, 8, 9]],
];

hiba:

Incompatible types in array literal expression
A kérdést 03/10/2012 20:58
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
16

Ez a munka:

class Foo {}
class Bar {}

var f: any[][] = [
    [Foo, [1, 2, 3]],
    [Bar, [7, 8, 9]],
];

Ez azt mondja, hogy van egy két dimenziós tömb, amelynek értéke bármi lehet (Foo, bár más elrendezések, stb.) Akkor is hasznos lehet olyan típusú állítást a Beágyazott tömbök:

class Foo {}
class Bar {}

var f = [
    [<any>Foo, [1, 2, 3]],
    [<any>Bar, [7, 8, 9]],
];

A jelenléte egy olyan, a belső tömb kényszeríti a fordító levezetése típusú, mint bármely [].

Válaszolt 03/10/2012 21:05
a forrás felhasználó

szavazat
1

Úgy néz ki, mint a géppel nem heterogén tömbök most. Tehát, mivel ez a kérdés merült fel először, amikor néztem ezt, és mivel nehéz megtalálni azt egyébként, itt hogyan ezt a kódot lehet írni most:

class Foo {}
class Bar {}

var f: [Foo|Bar, number[]][] =
    [[new Foo(), [1, 2, 3]],
     [new Bar(), [7, 8, 9]]];

(Most, ha ez így megy az úton típusú szintaktikai utánzó kifejezések, típusát is kap egy szintaktikai [Foo|Bar, [...number]][]...)

Még akkor is működik a függvényargumentumok, így ez typechecks finom:

function foo([obj,nums]: [Foo|Bar, number[]]) {
  for (let i of nums) console.log(`i = ${i}`);
}

f.forEach(foo);

és a szélsőséges változata:

f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
  for (let i of nums) console.log(`i = ${i}`); });
Válaszolt 23/12/2015 00:30
a forrás felhasználó

szavazat
0

Mivel a gépelt 1.4 megteheti típusú szakszervezetek. Tudtam, hogy ezt a valahogy így:

function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
    return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}

Az adott típusú akkor keresnek az Ön esetében lenne:

(Foo|Bar|number[])[][]

Vagy:

(typeof Foo|typeof Bar|number[])[][]
Válaszolt 07/06/2015 14:53
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more