ce tip afirmă am nevoie pentru a obține acest lucru pentru a compila?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
eroare:
Incompatible types in array literal expression
ce tip afirmă am nevoie pentru a obține acest lucru pentru a compila?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
eroare:
Incompatible types in array literal expression
Acest lucru va funcționa:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Aceasta spune ca ai o matrice bidimensională ale cărei valori pot fi nimic (Foo, Bar, alte tablouri, etc). Ai putea folosi, de asemenea, o afirmație de tip pentru matricile imbricate:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
Prezența unei singure oricare din matrice interioară forțează compilator pentru a deduce tipul său ca orice [].
Se pare ca dactilografiat nu au matrici eterogene acum. Deci, din moment ce această întrebare a venit mai întâi când am căutat acest lucru, și , deoarece este greu să - l găsiți în caz contrar, aici modul în care acest cod poate fi scris acum:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
(Acum , dacă acest lucru se duce în jos drumul de sintaxă tip mimand expresii, tipul ar obține , de asemenea , o sintaxă a [Foo|Bar, [...number]][]...)
Acesta funcționează chiar și cu argumente funcționale, astfel încât această typechecks fin:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
și versiunea extremă:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
Ca dactilografiate 1.4 puteți face uniuni de tip. Am fost capabil de a realiza acest lucru astfel:
function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}
Tipul specific v-ar fi în căutarea în cazul dumneavoastră ar fi:
(Foo|Bar|number[])[][]
Sau:
(typeof Foo|typeof Bar|number[])[][]