ne tür ben bu derlemeye almak gerekir mi iddia?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
hata:
Incompatible types in array literal expression
ne tür ben bu derlemeye almak gerekir mi iddia?
class Foo {}
class Bar {}
var f =
[
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
hata:
Incompatible types in array literal expression
Bu çalışacak:
class Foo {}
class Bar {}
var f: any[][] = [
[Foo, [1, 2, 3]],
[Bar, [7, 8, 9]],
];
Bu size hangi değerleri herhangi bir şey (Foo, Bar, diğer diziler, vs) olabilen bir iki boyutlu bir dizi var diyor. Ayrıca iç içe diziler için bir tür belirtilme kullanabilirsiniz:
class Foo {}
class Bar {}
var f = [
[<any>Foo, [1, 2, 3]],
[<any>Bar, [7, 8, 9]],
];
İç dizisindeki herhangi bir tek mevcudiyeti herhangi bir [] olarak türünü tahmin derleyici zorlar.
Typescript gibi görünüyor yapar şimdi heterojen diziler var. Bu soru ilk geldi beri Yani, bunun için bakıldığında, ve burada, aksi bulmak zor olduğundan bu kod artık yazılabilir nasıl:
class Foo {}
class Bar {}
var f: [Foo|Bar, number[]][] =
[[new Foo(), [1, 2, 3]],
[new Bar(), [7, 8, 9]]];
(Bu ifadeler taklit tipi sözdizimi yolda giderse Şimdi, türü de bir sözdizimi alacağı [Foo|Bar, [...number]][]...)
Hatta fonksiyon argümanları ile çalışır, bu nedenle bu ince typechecks:
function foo([obj,nums]: [Foo|Bar, number[]]) {
for (let i of nums) console.log(`i = ${i}`);
}
f.forEach(foo);
ve aşırı sürümü:
f.forEach(([obj,nums]: [Foo|Bar, number[]]) => {
for (let i of nums) console.log(`i = ${i}`); });
Typescript 1.4 itibariyle Tür sendikalar yapabilirsiniz. Ben şöyle Bunu gerçekleştirmek başardı:
function zip<T, X> (array1: T[], array2: X[]): (T|X)[][] {
return array1.map(function (v: T, i: number) { return [v, array2[i]]; });
}
Eğer bu durum geçerli olacaktır aradığını olacağını spesifik türü:
(Foo|Bar|number[])[][]
Veya:
(typeof Foo|typeof Bar|number[])[][]