如何解决打字稿错误“可能未定义的对象”? -ts(2532)

时间:2019-10-25 13:11:24

标签: typescript google-cloud-functions stripe-payments

我正在尝试创建一个辅助功能(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 :(得分:0)

您的if语句似乎缺少else,因此封闭函数始终返回一个值:

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