インターフェイスでのコンストラクターの定義がどのように機能するかを理解するのに苦労しています。私は何かを完全に誤解しているかもしれません。しかし、私はしばらくの間答えを探してきましたが、これに関連するものは何も見つかりません.
TypeScript クラスで次のインターフェイスを実装するにはどうすればよいですか。
interface MyInterface {
new ( ... ) : MyInterface;
}
Anders Hejlsberg は、このビデオ(約 14 分) で、これに似たものを含むインターフェイスを作成します。しかし、私の人生では、これをクラスに実装することはできません。
私はおそらく何かを誤解しています。何が得られていないのでしょうか?
編集:
明確にするために。「新しい ( ... )」とは、「何でも」という意味です。私の問題は、この作業の最も基本的なバージョンでさえ取得できないことです:
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () { }
}
コンパイルしようとすると、「クラス 'test' はインターフェイス 'MyInterface' を宣言していますが、それを実装していません: タイプ 'MyInterface' にはコンストラクト署名が必要ですが、タイプ 'test' には署名がありません」というメッセージが表示されます。
編集:
そのため、フィードバックを考慮して、これをもう少し調査した後.
interface MyInterface {
new () : MyInterface;
}
class test implements MyInterface {
constructor () => test { return this; }
}
有効な TypeScript ではなく、これで問題は解決しません。コンストラクターの戻り値の型を定義することはできません。「テスト」を返します。次のシグネチャ: class test { constructor () { } } "new () => test" のようです (オンライン エディターで "class" にカーソルを合わせ、そのコードだけを貼り付けて取得します)。そして、これが私たちが望むものであり、私がそうなると思っていたものです.
実際にコンパイルしている場所で、これまたは同様の例を誰かが提供できますか?
編集(もう一度...):
したがって、これをインターフェイスで定義できるのに、TypeScript クラスで実装できない理由について、考えが浮かんだかもしれません。次のように動作します。
var MyClass = (function () {
function MyClass() { }
return MyClass;
})();
interface MyInterface {
new () : MyInterface;
}
var testFunction = (foo: MyInterface) : void => { }
var bar = new MyClass();
testFunction(bar);
これは、javascript とのインターフェイスを可能にする TypeScript の唯一の機能ですか? または、javascriptを使用してクラスを実装することなく、TypeScriptで実装することは可能ですか?