[英]How to use enums for typing in typescript
我對如何將 Enums 與 TS 一起使用有點困惑。 您可以將枚舉用作值而不是類型嗎? 我嘗試了許多不同的方法,但我無法解決它。 這是我的代碼,但似乎沒有輸入檢查:
這是interface.ts
//interface.ts
export enum EMadeFrom {
'stripe',
'manually',
'app',
'invoice.payment_succeeded',
'customer.subscription.updated.trial',
'customer.subscription.updated.active',
}
export interface IPayments {
modelID: string
amount: number
paymentMethod: string
paymentMethodType: string
productType: string
stripeCustomerId: string
stripePaymentStatus: string
stripeId: string
stripePriceId: Array<string>
stripeSubscriptionStartDate: string
stripeSubscriptionEndDate: string
sessionPhoto: ISessionPhoto | null
madeFrom: EMadeFrom
createdAt: Date
updatedAt: Date
}
路線:
const CUSTOMER_SUBSCRIPTION_UPDATED_TRIAL =
'customer.subscription.updated.trial'
try {
const payment = await modelModel.createPayment(
model.id,
stripeInvoice.total / 100,
stripeCustomer.invoice_settings.default_payment_method,
'card',
productIsBundle ? BUNDLE : SUBSCRIPTION,
subscriptionUpdated.customer,
subscriptionUpdated.status,
subscriptionUpdated.id,
subscriptionUpdated.plan.id,
stripeSubscriptionStartDate,
stripeSubscriptionEndDate,
sessionPhoto,
CUSTOMER_SUBSCRIPTION_UPDATED_TRIAL,
)
和我的 createPayment 函數:
const createPayment = (
modelId: IPayments['modelID'],
amount: IPayments['amount'],
paymentMethod: IPayments['paymentMethod'],
paymentMethodType: IPayments['paymentMethodType'],
productType: IPayments['productType'],
stripeCustomerId: IPayments['stripeCustomerId'],
stripePaymentStatus: IPayments['stripePaymentStatus'],
stripeId: IPayments['stripeId'],
stripePriceId: IPayments['stripePriceId'],
stripeSubscriptionStartDate: IPayments['stripeSubscriptionStartDate'],
stripeSubscriptionEndDate: IPayments['stripeSubscriptionEndDate'],
sessionPhoto: null | IPayments['sessionPhoto'],
madeFrom: IPayments['madeFrom'],
) =>
new Promise((resolve, reject) => {
...
您已將CUSTOMER_SUBSCRIPTION_UPDATED_TRIAL
定義為:
const CUSTOMER_SUBSCRIPTION_UPDATED_TRIAL = 'customer.subscription.updated.trial';
這是一個字符串,而不是您的EMadeFrom
枚舉的成員。 您可以通過對其進行索引將其轉換為EMadeFrom
的類型:
EMadeFrom[CUSTOM_SUBSCRIPTION_UPDATED_TRIAL]; // gives correct value
所以你會這樣調用你的函數,實際上:
const payment = await modelModel.createPayment(
model.id,
stripeInvoice.total / 100,
stripeCustomer.invoice_settings.default_payment_method,
'card',
productIsBundle ? BUNDLE : SUBSCRIPTION,
subscriptionUpdated.customer,
subscriptionUpdated.status,
subscriptionUpdated.id,
subscriptionUpdated.plan.id,
stripeSubscriptionStartDate,
stripeSubscriptionEndDate,
sessionPhoto,
EMadeFrom[CUSTOMER_SUBSCRIPTION_UPDATED_TRIAL],
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.