我正在尝试为我们使用的字典创建类型。我们所做的有些奇怪,但我会尽力解释。我们的应用程序中有一个字典,我们这样声明:
localisation: LocalDico = {
page: ['Page', 'Page'],
of: ['of', 'de'],
items: ['items', 'items'],
itemsPerPage: ['items per page', 'items par page']
};
其中索引0是英语,索引1是法语。
LocalDico类型如下:
interface LocalDico {
page: [string, string] | string;
of: [string, string] | string;
items: [string, string] | string;
itemsPerPage: [string, string] | string;
}
这背后的共鸣是,在我们的代码中,我们不必总是像
this.localDico.page[this.language]
所以我们接下来将其转换为类似于
的对象//Obviously this is done programatically we dont actually recode everything
localDico: LocalDico = {
page: 'Page',
of: 'Of',
items: 'Items',
itemsPerPage: 'Items per page'
}
我的目标是,如果创建本地化的人(使用多种语言的人)仅尝试输入字符串,则会引发错误。但是使用localDico的人使用它作为字符串应该不会有任何问题。
基本上我想要
interface LocalDico {
page: string,
of: string,
items: string,
itemsperPage: string
}
and
interface Localisation{
page: [string, string],
of: [string, string],
items: [string, string],
itemsperPage: [string, string]
}
很显然,这是一个简单的字典,其中一些包含数百个条目。我不想总是复制接口,而是希望有一个接口定义所有可能的键,而另一个接口基本上说此var的每个键是一个字符串或包含2个字符串的数组。
很长一段时间以来,很抱歉,尽管我不确定是什么,但它只是试图彻底和清楚。如果不清楚,请告诉我
谢谢!
答案 0 :(得分:2)
当然,您可以使用映射类型,如下所示:
interface LocalDico {
page: string,
of: string,
items: string,
itemsperPage: string
}
type Localisation = { [key in keyof LocalDico]: [string, string] };
或更干净一点(在我看来):
// NOTE: an enum would also work here
type LocaleKeys =
| 'page'
| 'of'
| 'items'
| 'itemsperPage'
type LocalDico = { [key in LocaleKeys]: string }
type Localisation = { [key in LocaleKeys]: [string, string] }