Typescript: heterojen, dizi değişmezleri yazamazsınız

oy
13

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
Oluştur 03/10/2012 saat 20:58
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
16

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.

Cevap 03/10/2012 saat 21:05
kaynak kullanıcı

oy
1

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}`); });
Cevap 23/12/2015 saat 00:30
kaynak kullanıcı

oy
0

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[])[][]
Cevap 07/06/2015 saat 14:53
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more