2013-08-25 74 views
2

例如,我要一個靜態quote方法添加到RegExp類型:如何將靜態方法添加到現有類型?

RegExp.quote = (text: String) => { ... }; 

但是,當我嘗試這樣做,我收到以下錯誤:

The property 'quote' does not exist on value of type '{ $1: string; $2: string; $3: string; $4: string; $5: string; $6: string; $7: string; $8: string; $9: string; lastMatch: string; (pattern: string, flags?: string): RegExp; new(pattern: string, flags?: string): RegExp; }'.

回答

0

UPDATE看我的其他答案。我想下面的工作,但它並不

您可以使用一個模塊擴展正則表達式:

module RegExp{ 
    export function quote(whatev){return whatev;} 
} 

RegExp.quote('foo'); 

基本上使用一個模塊靜態屬性添加到現有實例。

+0

我只是試過這個,但它似乎覆蓋了'RegExp'的含義,所以我不能再實例化它。我也收到「重複標識符」錯誤。 – Sam

+0

即使工作,它不適合我旁邊的字符串 – deadManN

1

issue on Codeplex - 如果問題被接受,你可以擴展接口。同時,您可以手動進行更改以創建自己的自定義lib.d.ts.

interface RegExpStatic { 
    quote(text: string) : string; 
} 

您現在可以添加和訪問此屬性,因爲類型系統知道它。

+0

我認爲這隻會將它添加到* RegExp的*實例*。 – Sam

+0

啊 - 是的,他們還沒有爲靜態元素創建一個支持接口,他們已經聲明它是內聯的。我已經解決了一個問題 - 你可以暫時將這個改變放到你的'lib.d.ts'中:https://typescript.codeplex.com/workitem/1602 – Fenton

相關問題