Я работаю над приложением Angular (1.4.9) с TypeScript. Я занимаюсь почтой $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.");
        });
}
Но, тогда я подумал: "Разве не 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: Поставляемые параметры не соответствуют какой-либо сигнатуре целевого вызова". Учитывая ситуацию, я хочу прочитать это, так как он не может найти метод. Когда у меня есть это оригинал, он не делает эту жалобу. Не могли бы вы объяснить, что это за ошибка? Почему эта ошибка не предотвращает компиляцию?
