2016-04-28 12 views
3

hereと記載されているように、TypeScript 1.8の新しいグローバル補強を使用して、ネイティブJavaScriptタイプを拡張しようとしています。私はしかし、拡張機能が同じ型を返すときに問題が発生しています。グローバルな拡張を使用して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

あなたはこのようにそれを行うことができます。あなたのDateHelper.tsで

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

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

あなたはこのような何かを刚性実際、動作します

import './Global'; 

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

おかげで、:

Global.ts : 'PrototypeExtensions'から{{述語、セレクタ、アクション、コンプレッサ、ディクショナリ、グループ}}をインポートします。 グローバル{ \tインターフェース日 \t {\t \tコピー宣言する:()=>日付。 \t}} Date.prototype.Copy =関数(){ 戻り新しい日付(this.valueOf())。 }; これを実行すると、宣言グローバル部分を追加する必要があり、これによってTS2322エラーが発生します。 –

+0

グローバルな機能拡張を利用したソリューションを見つけるまで、このアプローチを使用します。 – Michael

関連する問題