首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我不确定键将被调用,我如何为嵌套对象编写接口?

如果我不确定键将被调用,我如何为嵌套对象编写接口?
EN

Stack Overflow用户
提问于 2020-05-08 00:28:25
回答 1查看 27关注 0票数 0

我正在尝试为股票价格的响应数据编写一个接口。

例如,当为Google请求特定日期范围内的股票价格时,我得到以下信息:

代码语言:javascript
复制
{
  "daily_prices": {
    "2019-05-10": {
      "open": 1168.84,
      "high": 1176.28,
      "low": 1146.37,
      "close": 1167.64
    },
    "2019-05-13": {
      "open": 1145.24,
      "high": 1151.97,
      "low": 1125.5,
      "close": 1136.59
    },
    "2019-05-14": {
      "open": 1142.32,
      "high": 1144.87,
      "low": 1123.53,
      "close": 1124.86
    },
    "2019-05-15": {
      "open": 1122.55,
      "high": 1178.3,
      "low": 1121.4,
      "close": 1170.8
    }
  }
}

我想为此编写一个接口,但我不知道daily_prices对象中将存在多少个对象。我也不知道property会怎么样。

我想做这样的事情:

代码语言:javascript
复制
interface stockPrices {
  daily_prices: {
    SOME_KIND_OF_DATE: {
      open: number,
      high: number,
      low: number,
      close: number
    }
  }
}

但我也不知道有多少对象会在daily_prices中。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-08 00:32:39

为此,您可以使用indexable type,即{ [key: string]: ... }

代码语言:javascript
复制
interface StockPrices {
  daily_prices: {
    [key: string]: {
      open: number,
      high: number,
      low: number,
      close: number
  } }
}

请参阅TypeScript Playground示例。

考虑对嵌套接口进行抽象

如果你想要更好的可读性,你甚至可以抽象化嵌套接口:

代码语言:javascript
复制
interface StockPrice {
  open: number,
  high: number,
  low: number,
  close: number
}

interface StockPrices {
  daily_prices: { [key: string]: StockPrice }
}

请参阅TypeScript Playground上的示例。

使用Record<T, K>或通用帮助器类型

更好的是,您可以利用Record<> utility type (参见playground上的):

代码语言:javascript
复制
interface StockPrice {
  open: number,
  high: number,
  low: number,
  close: number
}

interface StockPrices {
  daily_prices: Record<string, StockPrice>
}

...or为此声明了一个通用的Dictionary接口(请参见playground上的

代码语言:javascript
复制
// For bigger projects, this can be stashed away as a generic util/helper type
type Dictionary<T> = { [key: string]: T };

interface StockPrice {
  open: number,
  high: number,
  low: number,
  close: number
}

interface StockPrices {
  daily_prices: Dictionary<StockPrice>
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61662914

复制
相关文章

相似问题

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