【问题标题】:Typescript exist namespace with reserved word打字稿存在带有保留字的命名空间
【发布时间】:2018-08-06 03:14:05
【问题描述】:

我想升级"paypal-rest-sdk" typings。这个SDK有方法payment.authorization.void(...);

void 方法在 @types/paypal-rest-sdk 上不存在,我正在尝试通过本地声明覆盖它。

代码示例:

declare module "paypal-rest-sdk" {
  export namespace authorization {
    function void(): any;
  }
}

export const paypal = Paypal;

但是这段代码不起作用,当我尝试调用void 方法时,打字稿显示错误:Error:(94, 49) TS2339: Property 'void' does not exist on type 'typeof authorization'.

【问题讨论】:

    标签: node.js typescript paypal typescript-typings paypal-rest-sdk


    【解决方案1】:

    我认为提供包含名为void(叹气)的方法的类型定义的唯一方法是使用变量而不是命名空间。

    这是一个基于当前定义的示例,该定义基于“绝对类型化”(但将 authorization 命名空间转换为变量)。

    export var authorization: {
        get: (
            id: string,
            config: http.RequestOptions | CallbackFunction<AuthorizationResource>,
            cb?: CallbackFunction<AuthorizationResource>) => void;
        capture: (
            id: string,
            data: CaptureRequest | http.RequestOptions | CallbackFunction<CaptureResource>,
            config?: http.RequestOptions | CallbackFunction<CaptureResource>,
            cb?: CallbackFunction<CaptureResource>) => void;
        reauthorize: (
            id: string, data: Amount | http.RequestOptions | CallbackFunction<AuthorizationResource>,
            config?: http.RequestOptions | CallbackFunction<AuthorizationResource>,
            cb?: CallbackFunction<AuthorizationResource>) => void;
        void: (data?: any, config?: http.RequestOptions, cb?: CallbackFunction<any>) => void;
    }
    

    具体改动:

    • export namespace authorization 更改为 export var authorization
    • 命名空间主体转换为类型注释
    • 每个export function 都转换为成员
    • 每个函数都转换为类型注释

    这可以在没有类型错误的情况下访问:

    ...authorization.void(data, config, callback);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 2016-03-08
      • 2017-11-13
      • 2020-05-28
      • 2017-01-01
      • 2016-11-05
      • 2021-02-01
      • 2012-08-01
      相关资源
      最近更新 更多