4

いくつかのインターフェースとその実装の定義があります。実装する各クラスで宣言する必要があるメソッドが多数あります。

唯一の定義として、退屈で冗長だと思います。この機能を実装する時間がなかっただけですか、それともアンビエント実装の定義を強制する必要がある理由の背後にある考えがありましたか? それとも、私が見逃したものがありますか?

アップデート

ライブラリの所有者が言ったので、インターフェースメンバーが実装されていると確信している人の観点から書かれました。しかし、他の人のライブラリへの独自のインターフェイスを作成することにした場合は、すべての実装メンバーをサニティ チェックとして強制的に指定する方がよいでしょう。

4

2 に答える 2

3

インターフェイス メンバーを書き出す必要がなかったとしましょう。

class Base { }
class Derived extends Base { }

interface Foo {
    method(t: number): Base;    
}

declare class FooImpl1 implements Foo {
    // Empty
}

declare class FooImpl2 implements Foo {
    public method(): Derived;
}

FooImpl2の追加のオーバーロードを宣言しようとしていますmethodか、それともより少ないパラメーターを取り、より多くの派生型を返すシグネチャを使用してFooImpl2実装していますか? methodどちらでも有効な解釈になります。このようなあらゆる種類のケースに対応するルールを作成して、プログラマーが実際の意味を特定できるようにする必要があり、言語の予測が難しくなります。

于 2013-01-29T16:30:34.613 に答える
1

アンビエント宣言の実装を提供する必要はありません。

たとえば、インターフェイスは実装のない型のみを記述します。

interface MyInterface {
    property: string;
    method(input: number): void;
}

同じことが、クラスまたはモジュールのアンビエント宣言にも当てはまります。

declare class MyClass {
    property: string;
    method(input: number): void;
}

実装およびインターフェイスするクラスのアンビエント宣言を表現する場合は、次のショートカットを使用できます。

interface MyInterface {
    property: string;
    method(input: number): void;
}

declare var MyClass: MyInterface;
于 2013-01-29T12:52:21.820 に答える