2017-08-16 19 views
0

私のタイプのスクリプトインターフェイスに矢印関数を書き込んでいますが、エラーが発生しました"クラス 'ToastrService'が 'IToastr'インターフェイスを正しく実装していません。戻り値のタイプがvoidのタイプスクリプトインターフェイスの矢印関数

interface IToastr{ 
    (message:string,title:string):void; 
} 

@Injectable() 
export class ToastrService implements IToastr { 
    (message:string,title:string):void { 
     toastr.success(message,title); 
    } 
} 

私の質問は:私たちは無効と戻り値の型とTSインタフェースに関数のシグネチャを定義できますか?

Googleで検索してみましたが、例は見つかりませんでした。ありがとう!!何をやっている

+1

あなたの関数に名前を付ける必要がありますか? –

+0

私はこれまでにも通常の方法として定義しました。しかし、ちょうど矢印機能と定期的な機能を置き換えることを考えて、私はそれが通常の練習ではないことに驚いた。私の質問は、なぜ我々はこれを行うことはできませんか?もしできなければ。 – Akash

+1

私はTypeScriptのエキスパートではありませんが、ここで何を達成しようとしているのかは分かりません。どのインタフェースが使用されていますか?どのようにしてこのサービスを注入し、この機能を呼び出すつもりですか?私は同時にclasと関数であることが可能であるかどうかはわかりません。 –

答えて

1

はい、それは可能です。詳細は、公式のタイスクリプトを参照してください。

例1:

interface SearchFunc { 
    (source: string, subString: string): void; 
} 
let mySearch: SearchFunc; 
mySearch = function(source: string, subString: string) { 
    // do smth 
} 

例2:ソリューション:あなたは、通常のメソッドとして定義していないのはなぜに

interface IToastr{ 
    FuncName(message:string,title:string):void; 
} 

class ToastrService implements IToastr { 
    FuncName(message:string,title:string):void { 
     // toastr.success(message,title); 
    } 
} 
+0

いくつかの研究をした後、私はインターフェイスに名前付き関数を持たせることが理にかなっていると思います。矢印関数は匿名関数なので、その関数を実装しているクラス/サービスは名前がないので、クラス/サービスコンシューマにとって役に立たないでしょう。あなたの応答に感謝します。 – Akash

3

だけで機能の名前が欠落罰金だ(あるいは、これはコンストラクタであるならば、constructorキーワードが欠落している)

interface IToastr{ 
    toast(message:string,title:string):void; 
} 

@Injectable() 
export class ToastrService implements IToastr { 
    toast(message:string,title:string):void { 
     toastr.success(message,title); 
    } 
} 
+0

いくつかの研究をした後、私はインターフェイスに名前付き関数を持たせることが理にかなっていると思います。矢印関数は匿名関数なので、その関数を実装しているクラス/サービスは名前がないので、クラス/サービスコンシューマにとって役に立たないでしょう。あなたの応答に感謝します。 – Akash

関連する問題