用TypeRight将请求扩展到使用TypeError的ES5



我正在尝试在打字稿中扩展Request类,如下所示:

export class ApiRequest extends Request {
    static userAgentHeader: string = '';
    static xUserAgentHeader: string = '';
    public body: string;
    constructor(url: string, initialData?: any) {
        super(url, initialData);
        if (this.method !== 'GET') {
            this.body = initialData._bodyText;
        }
        this.headers.set('User-Agent', ApiRequest.userAgentHeader);
        this.headers.set('X-User-Agent', ApiRequest.xUserAgentHeader);
    }
    static setAgentHeader(userAgentHeader: string) {
        ApiRequest.userAgentHeader = userAgentHeader;
    }
    static setXUserAgentHeader(xUserAgentHeader: string) {
        ApiRequest.xUserAgentHeader = xUserAgentHeader;
    }
}

但是,当转移到ES5时,我会得到遵循的代码:

import * as tslib_1 from "tslib";
var ApiRequest = /** @class */ (function (_super) {
    tslib_1.__extends(ApiRequest, _super);
    function ApiRequest(url, initialData) {
        var _this = _super.call(this, url, initialData) || this;
        if (_this.method !== 'GET') {
            _this.body = initialData._bodyText;
        }
        _this.headers.set('User-Agent', ApiRequest.userAgentHeader);
        _this.headers.set('X-User-Agent', ApiRequest.xUserAgentHeader);
        return _this;
    }
    ApiRequest.setAgentHeader = function (userAgentHeader) {
        ApiRequest.userAgentHeader = userAgentHeader;
    };
    ApiRequest.setXUserAgentHeader = function (xUserAgentHeader) {
        ApiRequest.xUserAgentHeader = xUserAgentHeader;
    };
    ApiRequest.userAgentHeader = '';
    ApiRequest.xUserAgentHeader = '';
    return ApiRequest;
}(Request));
export { ApiRequest };
//# sourceMappingURL=ApiRequest.js.map

尝试通过调用new ApiRequest(url)创建ApiRequest对象时出现问题,Uncaught TypeError带有以下消息:

untuark typeError:无法构造'请求':请使用"新"运算符,该DOM对象构造函数不能称为函数。 在esta(apirequest上的评估(apirequest.js:5(,:1:1(

看来,如果没有new关键字,看来不得调用Request,但是转纸代码仅在第5行(_super.call()(上。

有没有办法以某种方式进行此操作?

最终起作用的解决方案是用类似类函数包装Request

export const RequestWrapper: RequestWrapper = function(url: string, initialData?: any) {
    return new Request(url, initialData);
} as any;
export interface RequestWrapper extends Request {
    (url: string, initialData?: any): Request;
    new (url: string, initialData?: any): Request;
}

然后扩展RequestWrapper而不是Request

export class ApiRequest extends RequestWrapper {
    ...
}

最新更新