【问题标题】: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);