Typescript 使用地图中的键创建类型?
如何使用地图中的键创建类型Typescript 使用地图中的键创建类型?,typescript,maps,Typescript,Maps,如何使用地图中的键创建类型 export const languageOptionsMap = new Map<string, ILanguageOption>([ [ 'cs', { value: 'cs', order: 1, text: 'Česky', }, ], [ 'en', {
export const languageOptionsMap = new Map<string, ILanguageOption>([
[
'cs',
{
value: 'cs',
order: 1,
text: 'Česky',
},
],
[
'en',
{
value: 'en',
order: 2,
text: 'English',
},
],
]);
将数据传递到映射后,我们无法提取类型信息。如果我们将数据放在一个单独的变量中,并使用
const
断言(在3.4中)确保typescript保留字符串文字类型,我们可以从中提取类型信息:
const data = [
[
'cs',
{
value: 'cs',
order: 1,
text: 'Česky',
},
],
[
'en',
{
value: 'en',
order: 2,
text: 'English',
},
],
] as const
export const languageOptionsMap = new Map<string, ILanguageOption>(data);
export type LanguageCode = typeof data[number][0]
const数据=[
[
“cs”,
{
值:“cs”,
订单:1,
文本:“Česky”,
},
],
[
"嗯",,
{
值:“en”,
订单:2,
正文:“英语”,
},
],
]常量
export const language options映射=新映射(数据);
导出类型语言代码=数据类型[编号][0]
每当我看到Map
时,我都想知道为什么有人不使用普通对象类型。在这种情况下,languageoptions映射.get(key).value==key
的约束不能用Map
接口表示,但可以表示为映射类型,如const asLanguageOptions=(t:t)=>t代码>@jcalz完全同意这个简单的对象,在我看来要简单得多。事实上,languageOptionsMap.get(key.value===key
是未选中的。但是,嘿,我只是提供
const data = [
[
'cs',
{
value: 'cs',
order: 1,
text: 'Česky',
},
],
[
'en',
{
value: 'en',
order: 2,
text: 'English',
},
],
] as const
export const languageOptionsMap = new Map<string, ILanguageOption>(data);
export type LanguageCode = typeof data[number][0]