我正在尝试将现有的JavaScript代码转录为TypeScript,并遇到了Object.defineProperty
扩展内置对象的问题,例如String.prototype
。
Object.defineProperty(String.prototype, 'testFunc',
{ value: function():string {return 'test';}
});
var s1:string = 'abc'.testFunc(); // Property 'testFunc' does not exist on type 'string'
var s2:string = String.prototype.testFunc(); // Property 'testFunc' does not exist on type 'String'
Object.defineProperty(Object, 'testFunc',
{ value: function():string {return 'test';}
});
var s:string = Object.testFunc(); // Property 'testFunc' does not exist on type 'ObjectConstructor'
它被正确地翻译成JavaScript,然而,带有TypeScript plugin的 Netbeans 8.1 声称错误列为上述评论。
我对declare
和interface
的所有混乱实验与任何正确的语法都不匹配。我不知道如何让它发挥作用。
如何在TypeScript中扩展内置对象并让IDE接受它?
答案 0 :(得分:1)
在1001尝试'出错之后,我找到了一个有效的解决方案。到现在为止它似乎做了我想做的事。
interface String { strFunc:Function; }
Object.defineProperty(String.prototype, 'strFunc',
{ value: function():string {return 'test';}
});
var s1:string = 'abc'.strFunc();
var s2:string = String.prototype.strFunc();
interface ObjectConstructor { objFunc:Function; }
Object.defineProperty(Object, 'objFunc',
{ value: function():string {return 'test';}
});
var s:string = Object.objFunc();
// objFunc should not work on strings:
var s:string = 'a string instance'.objFunc(); // Property 'testFunc' does not exist on type 'string'