【问题标题】:Using `stripe-node` types in client Angular TypeScript application在客户端 Angular TypeScript 应用程序中使用 `stripe-node` 类型
【发布时间】:2020-06-08 09:14:11
【问题描述】:

Stripe 最近在第 8 版中将类型添加到他们的条带节点库中。这取代了对来自definitelyTyped 的单独@types/stripe 的需求。在节点 TypeScript 环境中使用这些类型很简单,但我想知道在编译为浏览器 JavaScript 的客户端 TypeScript 应用程序 (Angular) 中使用这些类型是否可行。

它似乎适用于 npm install --save stripeimport Stripe from 'stripe' 任何我想添加 Stripe 类型的地方,但由于这是一个节点库,我想确保我没有遗漏任何明显的东西。在客户端应用程序中导入为节点设计的库有什么问题吗?

编辑:

需要明确的是,我并不是在问是否可以在我的客户端中充分利用 stripe-node。那将是一个巨大的安全风险。现在库已经内置了类型,如果我们可以在客户端打字稿中引用这些类型会很好。

【问题讨论】:

    标签: node.js angular typescript stripe-payments


    【解决方案1】:

    我使用 monorepo 包从 stripe-node 库中导出 TypeScript 接口。

    project
    └── packages
        ├── common
        └── web
    
    • 防止与来自@stripe/stripe-jsStripe 发生冲突
    • 避免将stripe-node 添加到web,这可能会以不良方式使用(例如使用机密)
    • 在使用expand 进行条带 API 调用时允许扩展类型
    // project/packages/common/stripe.ts
    import { Stripe } from "stripe";
    
    type StripeInvoice = Stripe.Invoice;
    type StripeSubscription = Stripe.Subscription;
    type StripeSubscriptionList = Stripe.Response<
      Stripe.ApiList<Stripe.Subscription>
    >;
    type StripeCustomer = Stripe.Customer;
    
    export {
      StripeInvoice,
      StripeCustomer,
      StripeSubscription,
      StripeSubscriptionList,
    };
    
    // project/packages/web/request.ts
    import { StripeSubscriptionList } from "@project/common/stripe";
    
    const listSubscriptions = async () => {
      // Wrapper function for the fetch API
      return await fetchAPI<StripeSubscriptionList>("subscriptions", {
        method: "GET",
      });
    };
    

    【讨论】:

      【解决方案2】:

      只有当您在前端代码中使用 服务器密码 时,才会出现问题。只要您不这样做并且仅将服务器库用于前端的类型定义,根本没有问题。

      【讨论】:

      • 我完全理解为什么您不应该在客户端应用程序上使用条带节点。我严格询问作为库的一部分提供的类型。例如,我有一个 API 端点,它从给定客户的条带中返回发票。如果在我的客户端上我可以引用此库提供的 Invoices 类型,那就太好了,因为这正是响应中返回的内容。
      【解决方案3】:

      stripe-node 的类型不适用于 Stripe.js,您需要改用这些类型:https://github.com/stripe/stripe-js

      npm install @stripe/stripe-js

      请参阅有关 TypeScript 支持的信息:https://github.com/stripe/stripe-js#typescript-support

      【讨论】:

      • 我正在为一些响应数据构建类型结构,其中一个响应是条纹发票列表,我想使用来自stripe-nodeStripe.Invoice 类型。 stripe-js中不存在这种类型。
      • Stripe.js 中也不存在该功能,它只存在于条带节点中。你能分享更多关于你正在建造的东西吗? Stripe.js 仅用于不支持列出发票的客户端交互,例如,您需要使用 stripe-node 或其他服务器语言。
      • 抱歉没有尽快回复。我有一个 API 端点,可以从给定客户的条带中返回发票。如果在我的客户端上我可以引用这个库提供的 Invoices 类型,那就太好了,因为这正是响应中返回的内容。所有条带节点功能都在服务器端处理,但如果在我的客户端上我可以引用此库提供的 Invoices 类型会很好,因为这正是响应中返回的内容
      猜你喜欢
      • 2023-01-24
      • 2018-07-21
      • 2014-03-26
      • 2019-01-30
      • 2015-01-30
      • 2010-12-31
      • 2019-07-26
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多