Skip to content

Commit 6539e8e

Browse files
authored
chore(types): simplify createInstance() generic (#731)
1 parent 16b2dfe commit 6539e8e

File tree

3 files changed

+66
-13
lines changed

3 files changed

+66
-13
lines changed

.changeset/thick-books-lie.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@paypal/paypal-js": minor
3+
---
4+
5+
simplify createInstance generic type for v6

packages/paypal-js/types/v6/index.d.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export interface PayPalV6Namespace {
2828
* });
2929
* ```
3030
*/
31-
createInstance: <T extends readonly [Components, ...Components[]]>(
31+
createInstance: <T extends readonly Components[]>(
3232
createInstanceOptions: CreateInstanceOptions<T>,
3333
) => Promise<SdkInstance<T>>;
3434
version: `${number}.${number}.${number}`;
@@ -119,18 +119,15 @@ export type CreateInstanceOptions<T extends readonly Components[]> = {
119119
* sdkInstance.updateLocale("es-US");
120120
* ```
121121
*/
122-
export type SdkInstance<T extends readonly [Components, ...Components[]]> =
123-
BaseInstance &
124-
("paypal-payments" extends T[number]
125-
? PayPalPaymentsInstance
126-
: unknown) &
127-
("paypal-guest-payments" extends T[number]
128-
? PayPalGuestPaymentsInstance
129-
: unknown) &
130-
("venmo-payments" extends T[number] ? VenmoPaymentsInstance : unknown) &
131-
("paypal-legacy-billing-agreements" extends T[number]
132-
? PayPalLegacyBillingInstance
133-
: unknown);
122+
export type SdkInstance<T extends readonly Components[]> = BaseInstance &
123+
("paypal-payments" extends T[number] ? PayPalPaymentsInstance : unknown) &
124+
("paypal-guest-payments" extends T[number]
125+
? PayPalGuestPaymentsInstance
126+
: unknown) &
127+
("venmo-payments" extends T[number] ? VenmoPaymentsInstance : unknown) &
128+
("paypal-legacy-billing-agreements" extends T[number]
129+
? PayPalLegacyBillingInstance
130+
: unknown);
134131

135132
/**
136133
* @internal
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { loadCoreSdkScript } from "../../../src/v6";
2+
import type { PayPalV6Namespace } from "../index";
3+
4+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
5+
async function main() {
6+
let paypal: PayPalV6Namespace | null;
7+
8+
try {
9+
paypal = await loadCoreSdkScript({
10+
environment: "sandbox",
11+
debug: true,
12+
});
13+
} catch (err) {
14+
throw new Error(`Failed to load the paypal sdk script: ${err}`);
15+
}
16+
17+
if (!paypal?.createInstance) {
18+
throw new Error("Invalid paypal object for v6");
19+
}
20+
21+
if (!paypal?.version) {
22+
throw new Error("PayPal v6 namespace missing version property");
23+
}
24+
25+
const sdkInstance = await paypal.createInstance({
26+
clientToken: "fakeValue",
27+
components: [
28+
"paypal-payments",
29+
"paypal-guest-payments",
30+
"venmo-payments",
31+
],
32+
});
33+
34+
sdkInstance.createPayPalOneTimePaymentSession({
35+
onApprove() {
36+
return Promise.resolve();
37+
},
38+
});
39+
40+
sdkInstance.createPayPalGuestOneTimePaymentSession({
41+
onApprove() {
42+
return Promise.resolve();
43+
},
44+
});
45+
46+
sdkInstance.createVenmoOneTimePaymentSession({
47+
onApprove() {
48+
return Promise.resolve();
49+
},
50+
});
51+
}

0 commit comments

Comments
 (0)