[BUG]: confirmSetup overloads are incorrectly throwing errors
Opened this issue · 1 comments
What happened?
When using confirmSetup
in TypeScript, with, for example, options like these, TS will throw errors for missing properties like clientSecret
, even though this is only required in a few of the overloads. It seems to have trouble selecting the proper one.
const stripeArguments = {
redirect: 'if_required',
elements: (stripeElements.value as StripeElements),
confirmParams: {
return_url: returnUrl,
},
}
// Should not throw an error.
stripe?.confirmSetup(stripeArguments)
Additionally, the type for redirect
is set to "always"
, which is one of the options, but doesn't include "if_required"
.
it looks like it just uses the last overload at all times, which has this signature:
confirmSetup(options: {
elements?: StripeElements;
clientSecret: string;
confirmParams: setupIntents.ConfirmSetupData;
redirect?: 'always';
}): Promise<never | {error: StripeError}>;
The only workaround I have found is by creating a custom type to force the right overload to be selected:
type OverloadOptions = {
elements: StripeElements
confirmParams?: Partial<ConfirmSetupData>
redirect: 'if_required'
}
const stripeArguments: OverloadOptions = {
redirect: 'if_required',
elements: (stripeElements.value as StripeElements),
confirmParams: {
return_url: returnUrl,
},
}
Environment
Chrome 130 on MacOS 15.0.1
Reproduction
No response
The params you shared should match the type defined here and used in this test:
confirmSetup(options: {
elements: StripeElements;
confirmParams?: Partial<setupIntents.ConfirmSetupData>;
redirect: 'if_required';
}): Promise<SetupIntentResult>;
but may require you to type the params explicitly when passed as an object due to type inference.