quel type Affirme ai-je besoin pour obtenir ce pour compiler?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Erreur:
Incompatible types in array literal expression
quel type Affirme ai-je besoin pour obtenir ce pour compiler?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Erreur:
Incompatible types in array literal expression
Cela fonctionne:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Cela dit que vous avez un tableau à deux dimensions dont les valeurs peuvent être quelque chose (Foo, bar, d'autres tableaux, etc.). Vous pouvez également utiliser une assertion de type pour vos tableaux imbriqués:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
La présence d'un seul quelconque dans le réseau interne force le compilateur de déduire son type que tout [].
Il ressemble à tapuscrit n'ont des réseaux hétérogènes maintenant. Donc, étant donné que cette question a été soulevée d' abord quand j'ai regardé pour cela, et comme il est difficile de trouver autrement, voici comment ce code peut être écrit maintenant:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
(Maintenant , si cela descend la route de la syntaxe de type mimer les expressions, le type serait également obtenir une syntaxe [Foo|Bar, [...number]][]...)
Il fonctionne même avec des arguments de fonction, donc ce typable bien:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
et la version extrême:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
Comme dactylographiées 1.4 vous pouvez faire les syndicats de type. J'ai pu accomplir cela comme ceci:
function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}
Le type spécifique que vous rechercher dans votre cas serait la suivante:
(Foo|Bar|number[])[][]
Ou:
(typeof Foo|typeof Bar|number[])[][]