如何向现有类型添加静态方法?

时间:2013-08-25 08:18:31

标签: typescript

例如,我想在quote类型中添加静态RegExp方法:

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

但是当我尝试这样做时,我收到以下错误:

  

属性'quote'在类型'{$ 1:string; $ 2:字符串; $ 3:字符串; $ 4:字符串; 5美元:字符串; 6美元:字符串; 7美元:字符串; 8美元:字符串; 9美元:字符串; lastMatch:string; (pattern:string,flags?:string):RegExp; new(pattern:string,flags?:string):RegExp; }”。

3 个答案:

答案 0 :(得分:2)

恐怕只有这个丑陋的解决方案:

// add it 
RegExp['quote'] = (whatev:any):any => { return whatev;};

// Use it 
RegExp['quote']('asdf');

// The default behaviour is intact: 
var foo = new RegExp('/asdf/');

我认为模块可以让它工作,但我已经证实它没有。

请参阅:https://stackoverflow.com/a/16824687/390330 和功能需要:https://typescript.codeplex.com/workitem/917

答案 1 :(得分:1)

请参阅issue on Codeplex - 如果问题被接受,您可以扩展界面。在此期间,您可以手动进行更改以创建自己的自定义lib.d.ts。

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

您现在可以添加和访问此属性,因为类型系统可以识别它。

答案 2 :(得分:0)

更新,请参阅我的其他答案。我认为以下内容可行,但不会

您可以使用模块扩展RegExp:

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

RegExp.quote('foo');

基本上使用模块向现有实例添加静态属性。