2016-05-28 61 views
0

我試圖將現有的JavaScript代碼寫入TypeScript,並遇到了將內置對象擴展爲Object.defineProperty的問題,例如, String.prototype在帶有插件的Netbeans上的TypeScript中擴展內建對象

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,但是,的Netbeans 8.1TypeScript plugin聲稱列爲上述評論的錯誤。

我所有與declareinterface混淆的實驗都沒有匹配任何正確的語法。我不知道如何讓它工作。

如何在TypeScript中擴展內建對象並使IDE接受它?

回答

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'