2016-04-23 7 views
12

私は、TypeScriptを使ってAngular(1.4.9)アプリケーションを開発しています。私は$ httpの投稿をしており、登録ページの成功または失敗の警告をトリガする方法を使用しています。 「私はのようだ、その後「提供されたパラメータがコールターゲットのシグネチャと一致しません」とはどういう意味ですか?

public showAlert(alertType: string, alertTitle: string, alertMessage: string, alertTimeout: number): void { 
    this.alertShow = true; 
    this.alertType = alertType; 
    this.alertTitle = alertTitle; 
    this.alertMessage = alertMessage; 
    this.alertTimeout = alertTimeout; 
} 

public postIt(): void { 
    that: any = this; // <-- See, I know what I'm doing. 

    var url: string = "/"; 
    var user: any = {}; 

    this.$http.post(url, user) 
     .then((data: any) => { 
      that.showAlert("success", "Yes!", "You are registered."); 
     }) 
     .catch((err: any) => { 
      that.showAlert("warning", "Embarrassing...", "Problem on our end. Try again, later."); 
     }); 
} 

しかし、ISNは:私は、アラートをトリガーするために使用していますので、一般的に、私はのような何かをするだろう方法の文脈で合格しなければならないことに気づきましたTypeScriptは、私がやっていることを知るのに十分にスマートです。ここでは、矢印機能が私のためにこれを処理していませんか?だから、私はそれを回します:

public postIt(): void { 
    // var that: any = this; <-- Boom! ...Commented out! 

    var url: string = "/"; 
    var user: any = {}; 

    this.$http.post(url, user) 
     .then((data: any) => { 
      // it doesn't like the "this" 
      this.showAlert("success", "Yes!", "You are registered."); 
     }) 
     .catch((err: any) => { 
      // it doesn't like the "this" 
      this.showAlert("warning", "Embarrassing...", "Problem on our end. Try again, later."); 
     }); 
} 

私はかなりスマートだと思います。 TypeScriptは協力します。私は解釈されたJavaScriptをチェックして、それが思ったようにしています:

myClass.prototype.postIt = function() { 
    // var that: any = this; 
    var _this = this; 
    var url = "/"; 
    var user = {}; 
    this.$http.post(url, user) 
     .then(function (data) { 
     _this.showAlert("success", "Yes!", "You are registered."); 
    }) 
     .catch(function (err) { 
     _this.showAlert("warning", "Embarrassing...", "Problem on our end. Try again, later."); 
    }); 

...そして私のアプリケーションはうまくいきます。しかし、コンパイラは私にエラーを投げます: "TS2346:提供されたパラメータが呼び出しターゲットのシグネチャと一致しません。"状況を考えて、私は方法を見つけることができないようにそれを読んでみたい。私がそれを元の方法で持っているとき、それはこの苦情をしません。このエラーの内容を正確に説明できますか?なぜこのエラーはコンパイルを妨げないのですか?

答えて

18

実際にエラーメッセージが間違っています。方法showAlertは4つのパラメータを必要とし、すべてが必要ですが、postItのメソッドshowAlertの中にはalertTimeout引数なしで呼び出されます。このコンパイラエラーはあなたがshowAlertまたは更新メソッドのシグネチャを呼び出すときalertTimeout値を渡し、最後のパラメータはオプションにする必要がありますいずれか離れて行くようにするには:あなたはどのセクションの終わりにセミコロンを追加した場合

public showAlert(alertType: string, alertTitle: string, 
    alertMessage: string, alertTimeout?: number): void { 
    ... 
} 
+0

Ah-ha!私は知っていたはずです...それはエラーを解決するが、私はその種の問題があった場合、コンパイラが動作しないことを読んだ(明らかに、それは)、そして、なぜ、コンパイラはエラーをキャッチしていない私が 'that = this'を使用していたとき(明らかに、そうではありません)? –

1

、次のように表示されます同じエラー。 importsセクションの1つのモジュールの最後にセミコロンを追加したのと同じ問題に直面していました。app.module.tsにあります。ちょうど私のためにそれを固定RouterModule.forRoot(APP_ROUTES);からセミコロンを削除

enter image description here

注:OPの質問には関係しませんが、このページに掲載されている他のユーザーと同じエラーで共有します。

関連する問題