TypeScript 类继承:“super”只能在派生类或对象文字表达式的成员中引用

ASA*_*SA2 4 javascript jquery inheritance typescript

我们正在使用带有继承的 TypeScript 类,并且遇到了明显的范围问题。TypeScript/JavaScript 不允许我们从 Promise 结构(甚至从封闭的函数)中调用“super”。我们收到此错误:

TypeScript:“super”只能在派生类或对象文字表达式的成员中引用

有没有解决的办法?这是代码:

export class VendorBill extends Transaction {
    constructor() {
        super();
    }

    save() {

        let deferred = $.Deferred();

        $.ajax({
            type: "GET",
            url: '/myrestapi',
            success: function (data) {    
                deferred.resolve();    
            },
            error: function (jqXHR: any, textStatus, errorThrown) {
                deferred.reject()
            }
        })

        $.when(deferred).always(function () {
            super.save();  <----------- THIS IS CAUSING THE ERROR
        })    
    }
}
Run Code Online (Sandbox Code Playgroud)

Nit*_*mer 5

原因是编译器转向super.save()

_super.prototype.fn.call(this);
Run Code Online (Sandbox Code Playgroud)

this不是正确的,因为您传递的函数未绑定到正确的上下文。

您可以使用箭头函数

$.when(deferred).always(() => {
    super.save();
}) 
Run Code Online (Sandbox Code Playgroud)