che tipo asserisce ho bisogno di ottenere questo per compilare?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
errore:
Incompatible types in array literal expression
che tipo asserisce ho bisogno di ottenere questo per compilare?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
errore:
Incompatible types in array literal expression
Questo funziona:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Questo dice che hai una matrice bidimensionale i cui valori possono essere qualsiasi cosa (foo, bar, altri array, ecc). Si potrebbe anche usare un tipo di asserzioni per gli array nidificati:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
La presenza di un unico qualsiasi a matrice interna costringe il compilatore di dedurre suo tipo come qualsiasi [].
Sembra dattiloscritto fa avere array eterogenei ora. Quindi, dal momento che questa domanda è venuto prima quando ho guardato per questo, e dal momento che è difficile trovare in altro modo, qui come questo codice può essere scritto oggi:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
(Ora, se questo va giù la strada della sintassi tipo imitando le espressioni, il tipo sarebbe anche ottenere una sintassi di [Foo|Bar, [...number]][]...)
Funziona anche con gli argomenti delle funzioni, quindi questo typechecks bene:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
e la versione estrema:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
A partire dal tipografico 1.4 si può fare di tipo sindacati. Sono stato in grado di compiere questo modo:
function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}
Il tipo specifico si sarebbe cercando nel tuo caso sarebbe:
(Foo|Bar|number[])[][]
O:
(typeof Foo|typeof Bar|number[])[][]