Stripe + TypeScript: как расширить определения @ types / stripe для stripe-node? - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю над проектом, где мы используем библиотеку Stripe для Node .Мы также хотим использовать TypeScript в этом проекте.

Я понял, что Stripe не предоставляет официальных определений TypeScript, но я нашел некоторые определения сообщества @ types /полоса на NPM.Поэтому я установил их, и через некоторое время я получил ошибку: Property 'sources' does not exist on type 'Stripe'.

Ну, некоторые определения отсутствуют, например, для этой stripe.sources связанной функциональности .

Я хочу добавить отсутствующие определения локально.Поэтому мне нужно расширить этот файл: @types/stripe/index.d.ts

Я думаю, что для решения вышеуказанной задачи мне нужно:

  • додобавить свойство sources: Stripe.resources.Sources; в класс Stripe,
  • , чтобы добавить класс Sources в пространство имен resources,
  • , чтобы добавить отсутствующие объявления функций в класс Sources.

Проблема в том, что я действительно не знаю как.Как должен выглядеть файл .d.ts с расширениями?Я сделал много попыток в соответствии с некоторыми примерами и документами TypeScript, но это не всегда работает.У тебя есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я думаю, что мой коллега нашел решение, которое работает для меня.Вот как он это сделал:

import ST from 'stripe'

declare module 'stripe' {
    namespace sources {
        interface ISource extends IResourceObject {
            ...
        }

        interface ISourceCreationData {
            ...
        }
    }

    namespace resources {
        class Sources {
            create(data: sources.ISourceCreationData): Promise<sources.ISource>;
            retrieve(source: string, client_secret?: string): Promise<sources.ISource>;
        }
    }

    class Stripe extends ST {
        sources: ST.resources.Sources;
    }
}
0 голосов
/ 14 сентября 2018

Я не верю, что есть способ увеличить класс Stripe, назначенный для экспорта; проблема похожа на этот открытый вопрос об увеличении экспортируемого по умолчанию класса. В настоящее время, поскольку вы не можете использовать дополнения, вам придется раскошелиться на определения @types/stripe для вашего проекта, а затем вы можете также внести все желаемые изменения таким образом.

...