モジュールがインターフェイスを実装することを要求するのは、TypeScriptでは非常に便利なようです。彼らがこの能力を実装しなかった理由は何ですか?TypeScriptモジュールがインターフェイスを実装または遵守できないのはなぜですか?私はこれを回避することはできますか?
モジュールがインターフェイスを実装できるようにすることが望ましくない理由を考えることはできませんが、そうであれば、モジュールに特定のプロパティ/メソッドセットを要求する他の方法はありますか?
モジュールがインターフェイスを実装することを要求するのは、TypeScriptでは非常に便利なようです。彼らがこの能力を実装しなかった理由は何ですか?TypeScriptモジュールがインターフェイスを実装または遵守できないのはなぜですか?私はこれを回避することはできますか?
モジュールがインターフェイスを実装できるようにすることが望ましくない理由を考えることはできませんが、そうであれば、モジュールに特定のプロパティ/メソッドセットを要求する他の方法はありますか?
モジュールは、このようなインターフェース(技術的にはゼロで実行時のオーバーヘッドが、実際には関係性が低い)に準拠していない場合は、コンパイルエラーを強制することができます:なぜできないためとして
interface foo {
bar(): number;
}
module mod {
export function bar(): number {
return 0;
}
}
var mod_is_foo: foo = mod; // errors if you change 'number' to 'string' above
をあなたはmodule mod implements foo
と言っていますか? All features start at minus 100。
<foo>mod; // Shortest, probably fastest?
<foo>undefined === mod; // Clearest non-var version?
ダイレクトフィードバックRyanのおかげで、あなたとチームは素晴らしいことをしています。私はコードプレックス上のtypescripts領域に関与し始めます。 –
私は実際にこの作業を使用することができましたが、やや異なった方法で使用できました。私は仲介者パターンで使用されるコンポーネントを構築していましたが、すべてのコンポーネントをコアシステムに「登録」していました。私がそれらを登録していたとき、私は実際のモジュールをメソッドに渡していました。私は、そのメソッドに、モジュールが提供したいすべてのものを含んだインタフェースしか受け入れないようにしました。そうすることで、それらのモジュールがインターフェイスに固執することが保証されました。もう一度ありがとうライアン! –
TypeScript 9.1では、この問題を解決するために 'typeof'キーワードを使用できます:http://blogs.msdn.com/b/typescript/archive/2013/08/06/announcing-0-9-1.aspx – Dan
ライアンれる: -
編集追加するここでは、新しいトップレベルのVARの作成を回避したい場合は、上記のvar
文の代わりに書くことができますいくつかの他の(やや奇抜な)ものがあります実際にはTypescriptチームで、彼の答えはかなり最終的です。しかし、私は個人的には、それがあなたが求める構文を提供していないということはいいと思う。
なぜなら、モジュールはインスタンス化できるもの(クラスなど)ではなく、インスタンスに似ているからです。この方法では、クラスよりもvarに近い。
だから、その理由は、あなたが書くでしょう、なぜにその類似していることになり:
var x:foo;
代わり
var x implements foo;
モジュールのは、その中で同じように動作しますが、ライアンとして
var y:foo = mod;
を行うことができますすでに指摘している。
はまた、このチェックアウト:
interface foo {
bar(): number;
}
module mod {
export function bar(): number {
return 0;
}
}
var x: foo;
x = mod;
// Still a bit whacky but allowed as module is a type as well as an instance
var y:mod;
y = x;
をインタフェースを実装するモジュール内のクラスを入れて、あなただけのドット離れて何をしたいたからです。 – Fenton
それは私には望ましくないかもしれませんが、私はこの質問をする前にそれについて考えました。私がそれをしたら、余計な不必要な定義があり、タイプの定義とインスタンスの割り当てを区別する必要があります。 –