typescriptインターフェイスで静的プロパティを宣言したいだけですか?私はこれに関してどこにも見つかりませんでした。
interface myInterface {
static Name:string;
}
出来ますか?
typescriptインターフェイスで静的プロパティを宣言したいだけですか?私はこれに関してどこにも見つかりませんでした。
interface myInterface {
static Name:string;
}
出来ますか?
@Duncanの@Bartvdsの回答に従ってください。ここで、何年も経った後に実行可能な方法を提供します。
Typescript 1.5 がリリースされた後のこの時点で (@Jun 15 '15)、便利なインターフェース
interface MyType {
instanceMethod();
}
interface MyTypeStatic {
new():MyType;
staticMethod();
}
デコレーターの助けを借りて、このように実装できます。
/* class decorator */
function staticImplements<T>() {
return <U extends T>(constructor: U) => {constructor};
}
@staticImplements<MyTypeStatic>() /* this statement implements both normal interface & static interface */
class MyTypeClass { /* implements MyType { */ /* so this become optional not required */
public static staticMethod() {}
instanceMethod() {}
}
github issue 13462の私のコメントを参照してください。
TypeScript のインターフェイスで静的プロパティを定義することはできません。
Date
の定義に追加しようとするのではなく、オブジェクトを変更したいとしDate
ます。それをラップするか、単純にリッチな日付クラスを作成して、実行できDate
ないことを行うことができます。
class RichDate {
public static MinValue = new Date();
}
Date は TypeScript のインターフェイスであるため、キーワードを使用してクラスで拡張することはできません。date がクラスであるextends
場合、これは良い解決策になるため、これは少し残念です。
Date オブジェクトを拡張MinValue
してプロトタイプにプロパティを提供する場合は、次のことができます。
interface Date {
MinValue: Date;
}
Date.prototype.MinValue = new Date(0);
次を使用して呼び出されます:
var x = new Date();
console.log(x.MinValue);
また、インスタンスなしで利用できるようにしたい場合は、それもできます...しかし、それは少しうるさいです。
interface DateStatic extends Date {
MinValue: Date;
}
Date['MinValue'] = new Date(0);
次を使用して呼び出されます:
var x: DateStatic = <any>Date; // We aren't using an instance
console.log(x.MinValue);
静的プロパティは通常、オブジェクトの (グローバル) コンストラクターに配置されますが、"interface" キーワードはオブジェクトのインスタンスに適用されます。
クラスを TypeScript で記述している場合、前の回答はもちろん正しいです。他の場所で既に実装されているオブジェクトを記述している場合、静的プロパティを含むグローバル コンストラクターを次のように宣言できることを知っておくと、他の人に役立つかもしれません。
declare var myInterface : {
new(): Interface;
Name:string;
}
静的クラス (つまり、すべてのメソッド/プロパティが静的) を定義しようとしている場合は、次のようにすることができます。
interface MyStaticClassInterface {
foo():string;
}
var myStaticClass:MyStaticClassInterface = {
foo() {
return 'bar';
}
};
この場合、静的な「クラス」は実際には単純な js オブジェクトであり、すべてのメソッドを実装しています。MyStaticClassInterface