Open3

Stripe pricing table with typescript

hidetaka okamotohidetaka okamoto
const PricingTable:FC = () => (
    <stripe-pricing-table
    pricing-table-id="prctbl_xxxx"
    publishable-key="pk_test_xxxx"
    />
)
Property 'stripe-pricing-table' does not exist on type 'JSX.IntrinsicElements'.
hidetaka okamotohidetaka okamoto

stripe.d.ts

declare global {
  export namespace JSX {
    interface IntrinsicElements {
      'stripe-pricing-table': {
        key: string;
        'pricing-table-id': string;
        'publishable-key': string;
        'client-reference-id'?: string;
      };
    }
  }
}

もしくはこっちかな?

  declare namespace JSX {
    interface IntrinsicElements {
      'stripe-pricing-table': {
        //key: string;
        'pricing-table-id': string;
        'publishable-key': string;
        'client-reference-id'?: string;
      };
    }
  }

tsconfig.json

- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
+ "include": ["next-env.d.ts", "./stripe.d.ts", "**/*.ts", "**/*.tsx"],
hidetaka okamotohidetaka okamoto

Next.jsだとこんな感じ。

import Script from "next/script";
import { FC } from "react";

export const NextStripePricingTable:FC<{
    pricingTableId?: string;
    publishableKey?: string;
    clientReferenceId?: string;
}> = ({pricingTableId,publishableKey,clientReferenceId}) => {
    if (!pricingTableId || !publishableKey) return null;
    return (
        <>
            <Script
                async
                strategy='lazyOnload'
                src='https://js.stripe.com/v3/pricing-table.js'

            />
            <stripe-pricing-table
                pricing-table-id={pricingTableId}
                publishable-key={publishableKey}
                client-reference-id={clientReferenceId}
            />
        </>
    )
}