[英]Typescript how to create a nested interface objects using mapped types?
I want to have data that would be as follow 我想要的数据如下
paymentProviderByCountry = {
England: worldPay,
Spain: worldPay
}
How do I create the interface for paymentProviderByCountryObj
that integrates paymentProvidersList
and countryList
in my desired dynamic format. 如何为paymentProviderByCountryObj
创建接口,该接口以所需的动态格式集成了paymentProvidersList
和countryList
。
I guess what I am looking for is how do I create recursively the obj 我猜我正在寻找的是如何递归创建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,
}
You're looking for in
(introduced in TypeScript 2.1 as part of Mapped Types ) 您正在寻找in
(以打字稿2.1引入的一部分映射类型 )
{ [key in countryList]: paymentProvidersList }
Or, in case you don't want to have to pass every country: 或者,如果您不想通过每个国家/地区:
{ [key in countryList]?: paymentProvidersList }
This is what ultimately worked for my end goal 这才是最终目标
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.