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
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
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 [].
Ú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}`); });
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[])[][]