簡體   English   中英

Typescript如何使用映射類型創建嵌套的接口對象?

[英]Typescript how to create a nested interface objects using mapped types?

我想要的數據如下

paymentProviderByCountry = {
    England: worldPay,
    Spain: worldPay
}

如何為paymentProviderByCountryObj創建接口,該接口以所需的動態格式集成了paymentProvidersListcountryList

我猜我正在尋找的是如何遞歸創建obj

    enum paymentProvidersList {
    WorldPay,
    Paypal,
}
enum countryListEnum {
    England,
    France,
    Spain,
}

type T0 = { [key in paymentProvidersList]: string }; // This would work

/*
  I want the values on paymentProviderByCountryObj to be dynamic based on the
   enum values so that i can have an object that looks like this

  paymentProviderByCountry = {
    England: WorldPay,
    Spain: Paypal,
    France: WorldPay
}
*/
interface paymentProviderByCountryObj {
    // This is the complex case, i cant get the index of the class to be dynamic and also its value
    [key in countryListEnum] :string : { [key in paymentProvidersList]: string }; 
}

export interface sysConfigInterface {
    paymentProviders: paymentProvidersList,
    paymentProviderByCountry: paymentProviderByCountryObj,
    minPaymentThreshold: String,
}

示例鏈接

您正在尋找in (以打字稿2.1引入的一部分映射類型

{ [key in countryList]: paymentProvidersList }

或者,如果您不想通過每個國家/地區:

{ [key in countryList]?: paymentProvidersList }

這才是最終目標

enum paymentProvidersList {
        WorldPay,
        Paypal,
    }
    enum countryListEnum {
        England,
        France,
        Spain,
    }

    // Or Record<countryListEnum, paymentProvidersList>
    type paymentProviderByCountryObj = { [k in countryListEnum]: paymentProvidersList } 

    const paymentProviderByCountry: paymentProviderByCountryObj = {
        [countryListEnum.England]: paymentProvidersList.WorldPay,
        [countryListEnum.France]: paymentProvidersList.WorldPay,
        [countryListEnum.Spain]: paymentProvidersList.Paypal
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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