首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript:获取嵌套对象的类型

TypeScript:获取嵌套对象的类型
EN

Stack Overflow用户
提问于 2022-04-17 18:44:12
回答 2查看 916关注 0票数 0

我知道这个问题可能已经在其他地方得到了答案,但如果不是,有人能帮我得到嵌套对象的类型吗?我们讨论的是一个有多个其他对象的对象,但是它们看起来几乎是一样的。

代码语言:javascript
复制
const VALUES = {
    currentStreak: {
      display: "Current streak",
      value: currentStreak,
    },
    longestStreak: {
      display: "Longest streak",
      value: longestStreak,
    },
    contributionsThisYear: {
      display: "Contributions this year",
      value: contributionsThisYear,
    },
    totalContributions: {
      display: "Total contributions",
      value: totalContributions,
    },
    currentCompany: {
      display: "Working at",
      value: currentCompany,
    },
}

这就是目标,这就是我所拥有的。它对主键运行良好,但我也希望键入每个对象的键。

代码语言:javascript
复制
export type Something = {
  [key in keyof typeof VALUES]: { [key: string]: string | number };
};

我怎样才能把第二部分弄对?因此,每个对象都有displayvaluevalue是数字或字符串。

抱歉,如果这是重复!我希望能一劳永逸地理解这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-17 19:10:37

如果Something应该是VALUES的类型,那么您就会遇到问题,因为您正在引用要在其自己的类型声明中键入的对象。

除非您有某种具有字符串值的Enum来提取键,否则您应该键入键作为string

代码语言:javascript
复制
interface innerSomething {
  display: string
  value: number | string
}

type Something = {
  [key in string]: innerSomething
}

对于Enum,应该是这样的:

代码语言:javascript
复制
enum SomethingKeys {
    currentStreak,
    longestStreak,
    contributionsThisYear,
    totalContributions,
    currentCompany
}

interface innerSomething {
  display: string
  value: number | string
}

type Something = {
  [key in keyof typeof SomethingKeys]: innerSomething;
}

您也不能在实际的Something声明中声明接口和声明内部对象的类型,如下所示:

代码语言:javascript
复制
enum SomethingKeys {
    currentStreak,
    longestStreak,
    contributionsThisYear,
    totalContributions,
    currentCompany
}

type Something = {
  [key in keyof typeof SomethingKeys]: { display: string, value: number | string };
}

虽然使用接口更容易阅读和维护。

票数 1
EN

Stack Overflow用户

发布于 2022-04-17 18:49:34

您可以显式定义第二部分。

代码语言:javascript
复制
type DataPoint = {
  display: string;
  value: number;
};

export type Something = {
  [key in keyof typeof VALUES]: DataPoint;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71904552

复制
相关文章

相似问题

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