TypeScript:paypal-rest-sdk补充authorization.void类型声明失败及保留字问题
解决PayPal REST SDK类型声明缺失与保留字冲突问题
我之前也碰到过类似的TypeScript类型声明坑,尤其是碰到保留字的时候特别闹心,给你一套亲测可行的解决方案:
1. 正确扩展类型声明(补上void方法)
因为void是TypeScript的保留字,不能直接当方法名声明,所以得用字符串包裹的方式绕开冲突。同时要使用TypeScript的**模块扩展(Module Augmentation)**来补充原有类型,而不是重新定义整个命名空间——这也是很多人本地声明失效的核心原因。
在项目里创建一个本地类型声明文件,比如src/types/paypal-rest-sdk.d.ts,写入以下内容:
import type { paypal } from 'paypal-rest-sdk'; declare module 'paypal-rest-sdk' { namespace paypal { namespace payment { namespace authorization { // 用引号包裹保留字,补充void方法的类型声明 function "void"( authorizationId: string, config?: paypal.Configuration, callback?: paypal.Callback<paypal.Authorization> ): void; // 如果你的SDK支持Promise调用,补充这个重载 function "void"( authorizationId: string, config?: paypal.Configuration ): Promise<paypal.Authorization>; } } } }
2. 确保TypeScript识别声明文件
检查tsconfig.json配置,要让TypeScript扫描到这个本地声明文件:
{ "compilerOptions": { // 你的其他编译选项 "typeRoots": ["./node_modules/@types", "./src/types"] // 可选,明确指定类型文件路径 }, "include": [ "src/**/*", "src/types/**/*.d.ts" // 确保本地声明文件被包含 ] }
3. 正确调用void方法
因为void是保留字,直接用.调用会报错,所以要用方括号语法调用:
import paypal from 'paypal-rest-sdk'; // 回调风格调用 paypal.payment.authorization["void"]("your-authorization-id", (err, authResult) => { if (err) { console.error('撤销授权失败:', err); return; } console.log('授权已成功撤销:', authResult); }); // Promise风格调用(如果SDK支持) paypal.payment.authorization["void"]("your-authorization-id") .then(authResult => console.log('授权已成功撤销:', authResult)) .catch(err => console.error('撤销授权失败:', err));
为什么之前的声明没生效?
大概率是这几个原因:
- 没有用模块扩展,而是重新定义了整个
paypal命名空间,导致覆盖了原有类型而非补充 - 声明文件的位置不对,TypeScript没扫描到
- 直接用
void当方法名,没加引号,触发了保留字语法冲突
内容的提问来源于stack exchange,提问作者Yegor
相关产品推荐
相关产品推荐

