2015-06-15 22 views
12

TypeScript'te bir dinamik nesne türü tanımlamanın herhangi bir yolu var mı? Aşağıdaki örnekte, "Karmaşık Türüm" için bir tür tanımlamak istiyorum:Doğru nesneler nasıl yapılır: TypeScript

"Karmaşık Tipim" türündeki nesneler, "herhangi bir özellik sayısı" olan nesnelerdir, ancak bu özelliklerin değerleri olmalıdır. Tip IValue olmak.

// value interface 
interface IValue { 
    prop:string 
} 

// My Complex Type 
myType = { 
    field1:IValue 
    field2:IValue 
    . 
    . 
    . 
    fieldN:IValue 
} 

// Using My Complex Type 

interface SomeType { 
    prop:My Complex Type 
} 
+1

'string-> IValue' haritasına sahip bir nesne oluşturamaz mısınız? –

cevap

34

Evet, bu tür bir davranış elde edilebilir, ancak biraz farklı şekilde. Sadece gibi typescript arayüzü kullanmak gerekir:

gibi örneğin kullanılacaktır
interface IValue { 
    prop: string 
} 

interface MyType { 
    [name: string]: IValue; 
} 

: Sen typescript sınıf oluşturmak gerekmez

var t: MyType = {}; 
t['field1'] = { prop: null }; 
t['field2'] = new DifferentType(); // compile-time error 
... 
var val = t['field1']; 
val.prop = 'my prop value'; 

, her şey düzenli bir javascript nesnedir gerek (bu durumda {}) ve MyType arabirimini uygulayarak, sözlük gibi davranır ve derleme zamanı tipi güvenliği sağlar.

+2

** Teşekkür ederim ** Yeni doğuştan FormScript'te tekrar çalışmayı denemek için beni çok fazla ızdırap ve kederden kurtardın! – hsrob