首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制要求对象数组中的每个对象都具有相同的形状

强制要求对象数组中的每个对象都具有相同的形状
EN

Stack Overflow用户
提问于 2019-02-01 23:33:04
回答 1查看 160关注 0票数 2

我使用的是TypeScript 3.2.2,我有一个接受对象数组的React组件。这些对象是通用的,但有几个例外:它们不能嵌套,并且必须都具有相同的形状。例如:

代码语言:javascript
复制
const entries = [
    {title: "foo", description: "bar", message: "hello"},
    {title: "something", description: "a thing", message: "thing"},
    {title: "hello", description: "greeting", message: "greetings!!"}
]

除此之外,我不关心对象的内容。它们可以拥有任意数量的属性,属性可以具有任何名称,它们的值可以是任何类型。但是,如果其中一个对象缺少一个条目,或者有一个额外的条目,或者如果它包含另一个对象,则组件将中断。

有没有一种方法可以在TypeScript类型系统中表达这个需求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-01 23:43:42

你可以这样做:

代码语言:javascript
复制
interface MyObject {
  [key: string]: string | number | boolean | undefined | null
}

基本上允许任何键的原始值,只要该键是string类型的。这确保了没有嵌套的对象或数组(尽管您可以将Array作为类型包括在内)

您还可以显式定义您可能期望的可选属性,以从intellisense中受益并获得一些额外的类型安全性:

代码语言:javascript
复制
interface MyObject {
  [key: string]: string | number | boolean | undefined | null;
  title?: string;
  description?: string;
  message?: string;
}

现在您已经将对象表示为接口,可以通过两种方式将任何值声明为此类型的数组:

代码语言:javascript
复制
Array<MyObject>

代码语言:javascript
复制
MyObject[]

我更喜欢后者,有些人更喜欢前者。这只是一个品味问题,因为它们都表达了给定值是一个只包含指定类型成员的数组的概念。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54482529

复制
相关文章

相似问题

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