Krishan
Krishan

Reputation: 2487

import stripe using node js + typescript

I need to import stripe in to my application

First i installed stripe npm package

npm install stripe --save

Stripe documentation says that secret key should be set before connect the api.

In Node it likes this

var stripe = require('stripe')(' your stripe API key ');

I need to convert it to typescript

I tried following way . but it didnt work for me

import * as stripe from 'stripe';
stripe('sk_test_...')

if some can help me to solve this problem it will great help to me to continue my project without delay.

Thank you

Upvotes: 53

Views: 46137

Answers (6)

chris
chris

Reputation: 2810

From the official documentation:

import Stripe from 'stripe';
const stripe = new Stripe('sk_test_...');

Upvotes: 1

Tan Nguyen
Tan Nguyen

Reputation: 1103

You can refer to the repo on GitHub: https://github.com/stripe/stripe-node

import Stripe from 'stripe';

const stripe = new Stripe('sk_test_...', {
  apiVersion: '2020-08-27',
});

const createCustomer = async () => {
  const params: Stripe.CustomerCreateParams = {
    description: 'test customer',
  };

  const customer: Stripe.Customer = await stripe.customers.create(params);

  console.log(customer.id);
};
createCustomer();

Upvotes: 72

8eecf0d2
8eecf0d2

Reputation: 1579

Update: The solution below is outdated and for those using [email protected] or greater the answer from David Dehghan should be used.

As britzkopf said, stripe don't provide their own definitions yet (and probably never will), but you can use the type definitions from @types/stripe.

npm install stripe @types/stripe

And then import and construct the Stripe class as follows.

import * as Stripe from 'stripe';
const stripe = new Stripe('xxx_xxx_xxx');

If you want finer grained imports for some reason you can use this (somewhat hacky) approach instead.

import { resources } from 'stripe';
const stripeData = require('stripe')('xxx_xxx_xxx');
const customers = new resources.Customers(stripeData, null);

Upvotes: 29

David Dehghan
David Dehghan

Reputation: 24815

As of stripe 8.0.1 the package has its own typeing so it is not necessary to install additional types. Just import it like this:

import Stripe from 'stripe';

Upvotes: 33

Kristian Mandrup
Kristian Mandrup

Reputation: 365

I had the same problem and the solution provided did not work for me:

import * as Stripe from 'stripe';
const stripe = new Stripe('xxx_xxx_xxx');

Using this approach, I got this error

[ts] Cannot use 'new' with an expression whose type lacks a call or construct signature. stripe.ts(1, 1): Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead. (alias) class Stripe (alias) namespace Stripe import Stripe

I got it working using "allowSyntheticDefaultImports": true in tsconfig.json With this compile option, the following is valid in TypeScript:

import Stripe from "stripe";

const secret = process.env.STRIPE_SECRET!;
export const stripe = new Stripe(secret);

Upvotes: 10

britzkopf
britzkopf

Reputation: 168

It's a feature request. Go give it another thumbs up.

Upvotes: 8

Related Questions