2016-03-19 10 views
0

JavaScriptでは、任意のタイプのprototypeに関数とメンバーを追加することは簡単です。私は次のように活字体で同じことを達成しようとしている:TypeScriptでインターフェイスを拡張する

Type '() => Date' is not assignable to type 'Date'. 
Property 'toDateString' is missing in type '() => Date'. 

TSが強く、種類で考えると、どのように我々はこれを達成できます。

interface Date 
{ 
    Minimum: Date; 
} 

Date.prototype.Minimum = function() { return (new Date()); } 

これは、次のエラーを生成しますか?

私はTSでカスタムユーティリティライブラリを書いているので、私はJSに頼っていません。

答えて

1

あなたはこのようにそれを持つことができます。

interface Date 
{ 
    Minimum(): Date; 
} 

(<any>Date.prototype).Minimum = function() { return (new Date()); } 

let d = new Date(); 
console.log(d.Minimum()); 

は、この情報がお役に立てば幸いです。

+0

「any」へのアサーションは必要ないことに注意してください。 –

2

インターフェイスはJSにトランベリングされず、タイプを定義するためだけにあります。

あなたは最初から継承する新しいインターフェイスを作成できます。

interface IExtendedDate extends Date { 
    Minimum:() => Date; 
} 

をしかし、実際の実装のためにあなたはクラスを定義する必要があります。例:

class ExtendedDate implements IExtendedDate { 
    public Minimum(): Date { 
     return (new ExtendedDate()); 
    } 
} 

ただし、インターフェイスなしでこれを行うことができます。

+0

Upvoted。私の見解では、たとえJSがそれをやっても、これはbuit-inオブジェクトのプロトタイプを乱すよりも優れています。 – Aaron

関連する問題