我使用的是TypeScript 3.2.2,我有一个接受对象数组的React组件。这些对象是通用的,但有几个例外:它们不能嵌套,并且必须都具有相同的形状。例如:
const entries = [
{title: "foo", description: "bar", message: "hello"},
{title: "something", description: "a thing", message: "thing"},
{title: "hello", description: "greeting", message: "greetings!!"}
]除此之外,我不关心对象的内容。它们可以拥有任意数量的属性,属性可以具有任何名称,它们的值可以是任何类型。但是,如果其中一个对象缺少一个条目,或者有一个额外的条目,或者如果它包含另一个对象,则组件将中断。
有没有一种方法可以在TypeScript类型系统中表达这个需求?
发布于 2019-02-01 23:43:42
你可以这样做:
interface MyObject {
[key: string]: string | number | boolean | undefined | null
}基本上允许任何键的原始值,只要该键是string类型的。这确保了没有嵌套的对象或数组(尽管您可以将Array作为类型包括在内)
您还可以显式定义您可能期望的可选属性,以从intellisense中受益并获得一些额外的类型安全性:
interface MyObject {
[key: string]: string | number | boolean | undefined | null;
title?: string;
description?: string;
message?: string;
}现在您已经将对象表示为接口,可以通过两种方式将任何值声明为此类型的数组:
Array<MyObject>或
MyObject[]我更喜欢后者,有些人更喜欢前者。这只是一个品味问题,因为它们都表达了给定值是一个只包含指定类型成员的数组的概念。
https://stackoverflow.com/questions/54482529
复制相似问题