42

typescript で次のインターフェイスを定義しました。

interface MyInterface {
    () : string;
}

このインターフェイスは、パラメーターをとらず、文字列を返す呼び出しシグネチャを導入するだけです。この型をクラスに実装するにはどうすればよいですか? 私は次のことを試しました:

class MyType implements MyInterface {
    function () : string {
        return "Hello World.";
    }
}

コンパイラは私にそれを言い続けます

クラス 'MyType' はインターフェイス 'MyInterface' を宣言していますが、実装していません: 型 'MyInterface' には呼び出し署名が必要ですが、型 'MyType' には署名がありません

呼び出し署名を実装するにはどうすればよいですか?

4

3 に答える 3

16

クラスはそのインターフェイスと一致できません。あなたが得ることができる最も近いのは、このクラスだと思います。これは、インターフェースに機能的に一致するコードを生成します(ただし、コンパイラによるものではありません)。

class MyType implements MyInterface {
  constructor {
    return "Hello";
  }
}
alert(MyType());

MyTypeこれにより動作するコードが生成されますが、署名があるため、コンパイラは呼び出し可能でないと文句を言いますnew() = 'string'(ただし、 で呼び出してもnew、オブジェクトが返されます)。

コンパイラが文句を言うことなく実際にインターフェイスに一致するものを作成するには、次のようにする必要があります。

var MyType = (() : MyInterface => {
  return function() { 
    return "Hello"; 
  }
})();
alert(MyType());
于 2012-10-07T15:32:22.540 に答える