我正在使用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.");
});
}
但是,那麼我想,「難道不是't 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:提供的參數不匹配調用目標的任何簽名。」考慮到這種情況,我想閱讀它就像找不到方法。當我擁有它的原始方式,它不會做出這個投訴。你能解釋一下這個錯誤到底是什麼嗎?爲什麼不能防止編譯錯誤?
啊哈!我應該知道......這可以解決這個錯誤,但是如果我遇到這種問題,我已經閱讀過編譯器不能工作(顯然,它會的),然後,爲什麼沒有編譯器捕獲錯誤當我使用'that = this'(顯然,它不會)。 –