2016-04-28 327 views
3

我試圖擴展本地JavaScript類型使用TypeScript 1.8中新的全局增強,如here所述。但是,當擴展函數返回相同類型時,我遇到了問題。如何使用全局增強來擴展TypeScript 1.8中的原生JavaScript類型?

Global.ts

export {}; 
declare global { 
    interface Date { 
     Copy(): Date; 
    } 
} 

if (!Date.prototype.Copy) { 
    Date.prototype.Copy = function() { 
     return new Date(this.valueOf()); 
    }; 
} 

DateHelper.ts

export class DateHelper { 
    public static CopyDate(date: Date): Date { 
     return date.Copy(); 
    } 
} 

我遇到嘗試使用定義的擴展在DateHelper.ts如果出現以下錯誤TS2322:

Type 'Date' is not assignable to type 'Date'. 
Property 'toDateString' is missing in type 'Date'. 

有誰知道如何解決這個問題?

回答

2

你可以這樣說:

Global.ts:

interface Date 
{ 
    Copy:() => Date; 
} 

Date.prototype.Copy = function() 
{ 
    return new Date(this.valueOf()); 
}; 

在你DateHelper.ts

import './Global'; 

export class DateHelper { 
    public static CopyDate(date: Date): Date { 
     return date.Copy(); 
    } 
} 
+0

謝謝,這將實際工作,直到你做這樣的事: 從'PrototypeExtensions'導入{Predicate,Selector,Action,Comparer,Dictionary,Group}; 聲明全局{ \t接口日期 \t { \t \t複製:()=>日期; \t} } Date.prototype.Copy =函數() { 返回新日期(this.valueOf()); }; 當你這樣做時,你需要添加聲明全局部分,這又會給你TS2322錯誤。 –

+0

謝謝,我會用這種方法,直到我們找到一個利用全局增強的解決方案。 – Michael