PayPal 使用 TypeScript 类型定义增强 JavaScript SDK


电子支付平台 PayPal 宣布已将 TypeScript 类型定义添加到其 JavaScript SDK paypal-js npm 包中。

“你知道 PayPal 为我们的 JavaScript SDK 发布了类型定义吗?而且你甚至不需要使用 TypeScript 就能受益。它们作为 Paypal-js npm 包的一部分。在这篇文章中,我将介绍该包的内容,以及如何利用 TypeScript 定义来加快 PayPal 应用程序的开发,无论你是否用 TypeScript 编写代码。”

npm install @paypal/paypal-js

根据介绍,该 paypal-js 模块可以轻松地异步加载 PayPal JavaScript SDK。它提供了一个 loadScript() 方法,将 SDK的<script> tag 注入页面,并返回一个 promise,该 promise 将在脚本加载成功后解析。使用此实用程序可以更轻松地在参数更改(例如货币更改)时处理错误和重新加载脚本等任务。

一个基本的用法示例:

TypeScript Hints

只要在 loadScript 回调中键入 Paypal ,TypeScript autocompletion 就会出现。TS 和 JS 文件都支持此功能,如下所示:

TypeScript 能够展示可以传递给 paypal.Buttons() 的所有选项,包括其返回类型。createOrder 选项可以接收一个 Record(一个标准的 JS 对象)的回调,其中有一个 string 作为 key,和一个未知值;以及一个 CreateOrderActions 对象作为其第二个参数。它将返回一个持有字符串值的 Promise,也就是 order ID。

如果缺少任何内容或输入不正确,IDE 将会用红色波浪线标出错误。

将鼠标悬停在文本上将提供有关缺少参数的详细信息,在 createOrder 方法上单击 cmd 将使开发者直接进入 TypeScript 定义。

选择附加功能

虽然 JS SDK 类型定义相当全面,但实际支持的方法取决于传递到 JavaScript SDK <script> tag 的组件查询参数。默认情况下,Buttons是唯一受支持的方法。有关选择所需组件的更多详细信息,可参阅脚本配置指南

没有 LoadScript 的 TypeScript 定义

loadScript() 方法并不是在应用程序中启用 TypeScript 定义的必要要求。如果你想避免将这种依赖性带入你的应用程序,可以使用 import type 语法而不是import。从而可在构建时获得所有 TypeScript 的好处,而不会增加包的大小。

从 paypal-js 模块 import 和 import type 时,都提供对 loadScript 模块和全局 window.paypal 变量的类型定义的访问。

进一步拥抱类型

为 PayPal JavaScript SDK 维护的所有类型都直接从 paypal-js 模块的根目录中导出,并且可以单独导入:

上图示例中,myIntent 变量和 postal_code 属性都输入错误,将显示类似于下面的错误:

有数十种与 PayPal 相关的类型,每种类型都有关于其属性和用途的大量文档,可以进一步帮助构建应用程序。

Paypal 开发者关系经理 Jamund Ferguson 总结称,“有了可用的类型提示,你在使用 PayPal JavaScript SDK 编写应用程序时会更有效率。你应该能够在不离开  IDE 的情况下完成更多工作,并且当你确实需要查看文档时,多数情况下你都可以在类型定义中找到所需的内容。其他情况下,则将提供指向给定方法的最佳文档的直接链接。无论你是否在应用程序中使用 TypeScript,都可以从这些新的类型定义中受益。”


相關推薦

2021-11-09

补全现在与 JetBrains ReSharper 的最新版本兼容。 JavaScript/TypeScript JavaScript 和 TypeScript 测试现在可以在 Visual Studio Test Explorer 中进行NPM GUI 可用,所以你现在可以像下载 Nuget 包一样下载 NPM 模块了…… .NET 6 SDK .NET 6 SDK 已包

2023-10-09

在哗众取宠,刻意钓鱼博眼球。 要知道发布于 2012 年的 TypeScript 目前在诸多编程语言排名、指数或开发者调查中一直位居前列,也是最受欢迎和最常用的编程语言,并被全球数百万开发者使用。 随便找几篇关于 TypeScript 的新

2023-09-06

之一将是解决现有的痛点,特别是在 type-only imports、TypeScript service 和 monorepos 方面。开发团队将致力于完善新功能,例如改进的错误格式和语言服务器集成。并计划添加对已发布的新版本语言和框架的功能的支持;以及

2023-05-25

te Cloud 版本发布 2022.07.01 基于 Vue3、Vite2、Pinia、Quasar2、Typescript、Hooks 等最新技术栈全新构建前端工程正式发布 2022.07.30 正式加入 Dromara 开源社区,项目名称由 Eurynome Cloud 更名为 Dante Cloud 2022.08.15 Dante Cloud Star 数突破 1K。 2

2022-08-12

到前 10 名则需要数百万次。报告揭露的一些趋势包括: Typescript 超越 Javascript 成为最受欢迎的 DevOps 语言 研究称,TypeScript 成为 CircleCI 上最常用的语言的原因在于:首先,类型安全使开发人员能够在他们的 IDE 中或在编译时而

2023-03-24

Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.32 正式发布,值得关注的更新包括: 增强 Node.js 的兼容性 Deno 在提高与 Node.js 的兼容性方面继续取得重大进展,提供了更顺畅的整

2023-05-11

SDoc Conversion" PR 的描述,Svelte 团队将会从目前使用的 TypeScript 迁移到 JSDoc。 前端 UI 框架 Svelte 创始人 Rich Harris 在推特的回复印证了这一消息。他表示这个决定没有改变 Svelte 的类型安全。 负责 Svelte 编译器的开发者则说

2022-10-10

TypeScript 已经诞生 10 年了。10 年前——2012 年 10 月 1日,TypeScript 首次公开亮相。当时主导 TypeScript 开发的 Anders Hejlsberg 这样描述 TypeScript: 它是 JavaScript 的类型化超集,可被编译成常用的 JavaScript。TypeScript 还可以通过启

2023-03-16

s.featureprobe.io/zh-CN/how-to/Server-Side%20SDKs/rust-sdk。 「 JavaScript SDK 」使用文档增加“事件上报”的说明 文档链接:https://docs.featureprobe.io/zh-CN/how-to/Client-Side%20SDKs/javascript-sdk。 四、功能预告 指标分析的接入引导

2022-12-02

不匹配的对象都将被隐藏。 Web 开发 针对 JavaScript 和 TypeScript 的 Code Vision 此版本为 Web 开发引入了的新 Code Vision 功能。 它可以收集 JavaScript 和 TypeScript 代码中类型和类型成员的各种指标,并在声明附近显示此信息。 其他更

2022-03-14

来可选的类型语法,该提案可能会使 JavaScript 原生自带 TypeScript 的一些特性,使 TypeScript 语言更快、更容易使用。 具体而言,该提案要求将类型标注(Type Annotations)添加到 JavaScript 代码中,允许类型标注被外部类型检查器检

2021-11-18

11月17日,微软发布了 TypeScript 4.5 正式版本 ,4.5 正式版本和 RC 版本在功能上并没有什么改动,除了添加关于新 JSDoc 特性的注释 ,不过这个特性也是 RC 版本的新功能,只是当时没有写出来。 TypeScript 4.5 正式版新

2024-04-11

Gitee OpenAPI v5 SDK for Typescript v5.4.83 发布。 以下是本次更新内容: 新增 获取存储库指定发行版的附件清单接口 新增 存储库指定发行版附件上传接口 新增 获取/删除存储库下指定发行版附件接口 新增 指定存储库发行版附

2023-06-03

TypeScript 5.1 已正式发布。 重要变化 更智能地检查未定义返回值的函数 (undefined-Returning Functions) 旧代码 function foo() { // no return } // x = undefined let x = foo(); //fine - we inferred that 'f1' returns 'void' function f1() { // no returns } //fine -