2017-04-09 35 views
0

讓我們說我有一個函數EL,在打字稿定義:什麼是指數的簽名添加到打字稿定義的函數的推薦方式

function el():string { .. } 

我想刪除類型衝突(無指標籤名)當後來添加鍵到el:

el.x =() => {...} 

這是可能做到不鑄造任何?

到目前爲止,我已經找到了最好的解決方案是定義一個單獨的接口和鑄造到它,而分配:

interface ElFactory { 
    [index: string]:() => string 
(): string 
} 

然後:

(el as ElFactory).x =() => {} 

是否有可能完全避免鑄造?如同在定義函數時將函數與接口關聯或在定義函數時指定索引簽名一樣?

+0

目前還不清楚你在找什麼。你能提供一些例子嗎?對我來說目前看起來你想擴展一個'Function'類型? – smnbbrv

+0

我想要一個變量el,它可以作爲函數el()調用,並且具有函數成員el.x()。 – lorefnon

回答

1

你可以投你的函數接口被創建時:

interface ElFactory { 
    [index: string]:() => string 
(): string 
} 

var el = function(): string { 
    return "test"; 
} as ElFactory; 

el.test1 =() => "22"; // works 
el.test2 = "22"; // error 

以打字稿2.2,你將不得不使用括號符號定義屬性這個工作之前:

el["test1"] =() => "22"; // works 
el["test2"] = "22"; // error 
+1

僅供參考:從TypeScript 2.2開始,'el.test1'和'el.test2'就可以正常工作。 –

+0

不錯。我正在測試http://www.typescriptlang.org/play/,它必須運行一箇舊版本。 – Saravana

相關問題