簡體   English   中英

如何使用枚舉輸入打字稿

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM