Как устранить ошибку машинописного текста «возможно, неопределенный объект»? - тс (2532) - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать вспомогательную функцию (облачные функции Firebase) для подключения источника платежа к учетной записи клиента Stripe.

Вот мой код:

export const attachSource = async(uid: string, source: string) => {

    const customer = await getOrCreateCustomer(uid);

    const existingSource = customer.sources.data.filter(s => s.id === source).pop(); 

    if (existingSource) {
        return existingSource;
    } 
    else {
        await stripe.customers.createSource(customer.id, { source: source });
        // update default
        return await stripe.customers.update(customer.id, { default_source: source });
    }
}

Я пробовал необязательную цепочку customer.sources?.data, но это выдает несколько ошибок.

Также пробовал обернуть его в оператор if, подобный этому:

if (customer && customer.sources && customer.sources.data) {
    const existingSource = customer.sources.data.filter(s => s.id === source).pop()

    if (existingSource) {
        return existingSource;
    } else {
        await stripe.customers.createSource(subscriber.id, { source: source});
        // update default
        return await stripe.customers.update(subscriber.id, {default_source: source});
    }
}

Это приводит к следующей ошибке: Not all code paths return a value.ts(7030)

Невозможно использовать !, чтобы устранить проблему, поскольку в Stripe может отсутствовать источник платежа.

1 Ответ

0 голосов
/ 25 октября 2019

Похоже, что в вашем операторе if отсутствует else, поэтому включающая функция всегда возвращает значение:

if (customer && customer.sources && customer.sources.data) {
}
else {
    // what do you want to return here?
}
...