首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以键入对象,使扩展接口的所有属性都是给定的类型?

有没有一种方法可以键入对象,使扩展接口的所有属性都是给定的类型?
EN

Stack Overflow用户
提问于 2019-03-28 22:48:13
回答 1查看 28关注 0票数 1

我正在尝试为我们使用的字典创建一个类型。我们所做的有点奇怪,但我会尽力解释。我们在应用程序中有一个字典,声明如下:

代码语言:javascript
运行
复制
  localisation: LocalDico = {
    page: ['Page', 'Page'],
    of: ['of', 'de'],
    items: ['items', 'items'],
    itemsPerPage: ['items per page', 'items par page']
  };

其中索引0是英语,索引1是法语。

LocalDico类型如下:

代码语言:javascript
运行
复制
interface LocalDico {
  page: [string, string] | string;
  of: [string, string] | string;
  items: [string, string] | string;
  itemsPerPage: [string, string] | string;
}

这背后的原因是,在我们的代码中,我们不希望总是像这样

代码语言:javascript
运行
复制
this.localDico.page[this.language]

因此,我们继续将其转换为如下所示的对象

代码语言:javascript
运行
复制
//Obviously this is done programatically we dont actually recode everything
localDico: LocalDico = {
  page: 'Page', 
  of: 'Of', 
  items: 'Items', 
  itemsPerPage: 'Items per page'
}

我的目标是,如果有人创建本地化(使用多种语言的本地化),试图只放置一个字符串,它会引发错误。但是使用localDico的人使用它作为字符串应该不会有任何问题。

基本上我想

代码语言:javascript
运行
复制
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]
}

显然,这是一本简单的字典,我们有一些包含数百个条目的字典。我不想总是重复接口,我宁愿有一个接口定义所有可能的键,而另一个接口基本上说明这个变量的每个键都是一个字符串或包含2个字符串的数组。

很抱歉,这篇很长的帖子只是想要彻底和清晰,尽管我不确定它是不是。如果不清楚,请让我知道

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-28 22:54:25

当然,您可以使用映射类型,如下所示:

代码语言:javascript
运行
复制
interface LocalDico {
  page: string, 
  of: string, 
  items: string, 
  itemsperPage: string
}

type Localisation = { [key in keyof LocalDico]: [string, string] };

或者更干净一点(在我看来):

代码语言:javascript
运行
复制
// 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] }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55400522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档