2017-04-18 63 views
0

我用下面的方式在Javascript:Typescript中可能的數組類型?

var things = { 
    "blue": BlueThing, 
    "heavy": HeavyThing, 
    "imaginary": ImaginaryThing 
}; 

var my_thing = things[thing_type](); 

我遷移代碼庫打字稿,我不能找到一種方法來達到同樣的事情。我定義了一個Thing接口和相關的類。有沒有辦法實現這種動態實例化,而不訴諸於大的case聲明?

+0

Object.keys(東西)?只是猜測 –

+0

@TomMillard關鍵是我無法在TypeScript中創建'things'字典,因爲類型沒有類型。 – fredley

+0

Typescript是JavaScript的超集,並且** all **有效的Javascript也是有效的Typescript。因此,你不清楚你有什麼問題,或者爲什麼這個代碼不能按原樣工作。 – Claies

回答

0

好吧,我整理了一下。

使用構造接口模式,我現在有這樣的:

interface ThingConstructor { 
    new (options: {[key: string]: string}) : Thing 
} 

interface Thing{ 
    /* * */ 
} 

function thingFactory(type: ThingConstructor) : Function{ 
    return function(options) : Thing { 
    return new type(options) 
    } 
} 

-------- 

things: {[key: string]: Function} 

-------- 

things["blue"] = thingFactory(BlueThing) 

var my_thing = things[thing_type]({"stripes": "vertical"}) 
+0

也可以指定功能類型嗎? '(選項)=>事情' – MinusFour