You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TypeScript无法识别对象中的expires_at属性?

解决TypeScript中Stripe订阅对象expires_at字段不存在的类型错误

出现这个问题的核心原因是event.data.object的类型Stripe.Event.Data.Object是一个宽泛的通用类型,并没有包含订阅对象特有的expires_at字段。以下是几种可行的解决方法:

1. 直接使用类型断言

将通用对象断言为具体的Stripe.Subscription类型,让TypeScript识别该字段:

const subscription = event.data.object as Stripe.Subscription;
console.log(subscription.expires_at); // 类型检查通过

2. 类型守卫(更安全的方式)

通过自定义类型守卫在运行时验证对象类型,同时让TypeScript在代码分支中自动推断正确类型:

function isSubscription(obj: Stripe.Event.Data.Object): obj is Stripe.Subscription {
  return 'expires_at' in obj;
}

const subscription = event.data.object;
if (isSubscription(subscription)) {
  console.log(subscription.expires_at); // 分支内类型安全
}

3. 指定事件的泛型类型

如果是处理Stripe Webhook事件,可以直接给Stripe.Event指定泛型参数为Stripe.Subscription,从源头锁定对象类型:

// 定义event时指定泛型
const event: Stripe.Event<Stripe.Subscription> = yourWebhookEvent;
const subscription = event.data.object;
console.log(subscription.expires_at); // 无需额外处理即可访问

内容的提问来源于stack exchange,提问作者Pawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:45:32