2016-03-30 14 views
0

olarak, dize veya sayı endeksi ile özel bir dizi arayüzü ilan edebilir Handbook söyledi nasıl olabilir Ben böyle bir şeyi başlatıyorum? İşte başlatma dizisi arayüzü

Denedim ve hata iletisi (TSC 1.8.7 ile PhpStorm 2016,1 kullanarak) sağlanan budur:

foo:EventRegistrations = []; 

Tipi 'EventRegistrations'

yazmanız atanamama '[] tanımsız'
foo:EventRegistrations = [[]]; 

Tipi 'tanımsız [] []' 'EventRegistrations'

yazmanız atanamama
foo:EventRegistrations = [index:string]:ListenerEntry[]; 

sözdizimi hatası (birinci beklenen: olan)

foo:EventRegistrations = [string]:ListenerEntry[]; 

sözdizimi hatası (beklenen

; burada: olduğu)

foo:EventRegistrations = new EventRegistrations(); 

sözdizimi hatası (isim 'EventRegistrations') Bu durumda

cevap

1

bulamıyorum, aslında bir dizi [], sen bir sözlük {} tanımlıyorsanız tanımlayan değil dize indeksleyicileri sözlük stili araması için kullanıldığından. JavaScript, tüm nesnelerin sözlükleri çünkü Aşağıdaki örnekte

, sen nesne {} yerine [] kullanılarak bildirilir göreceksiniz (hatta diziler!) Diziler sadece özel anlam ve bunları sağlayan bir length özelliği vardır diziler gibi davranmak için (sayısal olarak endekslenmiş)

interface ListenerEntry { 
    foo: string; 
    bar: string; 
} 

interface EventRegistrations { 
    [index:string]:ListenerEntry[]; 
} 

var x: EventRegistrations = {}; 

x["one"][0].foo = "Hello"; 
x["two"][1].bar = "World";