この例では、継承を使用して元のオブジェクトを拡張します。ネーミングは説明用です。
class Test {
baseMethod() {
}
}
class TestWithClose extends Test {
close() {
}
}
var t = new TestWithClose();
t.close();
t.baseMethod();
アップデート
コメントで、組み込み関数の拡張メソッドを好きなように記述できると述べましたが、独自のコードでも同じことをしたいことがわかりますが、それは不可能です。
これで理由が説明されることを願っています。
TypeScript で宣言を作成する場合、その宣言に追加することでその宣言を拡張できます。declare キーワードを使用するか、ファイルをファイルに配置.d.ts
できます。
たとえば、1 つのファイルに次の宣言があるとします。
declare interface ExampleInterface {
methodOne();
}
別のファイルで宣言を拡張できます。
declare interface ExampleInterface {
methodTwo();
}
したがって、それを使用すると、両方の機能が利用可能になります。
function example(example: ExampleInterface) {
example.methodOne();
example.methodTwo();
}
これらは実際には拡張メソッドではありません。これは、複数回の実装についてコンパイラに伝えているだけです。これは、各プラグインがインターフェイスに追加する定義を持つことができるため、jQuery で特に役立ちJQuery
ます。
インターフェイスに追加すると、すべての実装でインターフェイス定義と一致するように更新が必要になるため、独自の TypeScript コードに対してこれを行うことはできません。
ここでのマインド シフトは、TypeScript が静的な型付けを提供し、動的な動作を探しているということです。そのため、どちらかを選択する必要があります。たとえば、本当に必要な場所で動的な動作を使用し、残りは静的に型付けしたままにすることができます。
class Test {
}
// statically typed
var stTest = new Test();
// dynamically typed
var testExtender: any = Test;
testExtender.prototype.close = function() {
alert('Close');
};
var t: any = new Test();
t.close();
拡張メソッドをサポートするために、将来的に何かが言語に追加されないと言っているわけではありません。