这是一个简单的问题,令我惊讶的是我在任何地方都找不到明确的答案。我正在制作一个 API,我需要定义一个可以具有多个(字符串)属性的接口,但是没有固定数量的属性,也没有为它们设置名称(但它们都必须具有字符串值)。因此,以下所有对象都将匹配该类型:
{ slot: "ten" }
{ class: "Luxury", base: "never", city: "Timbuktu" }
{ slot: "ten", class: "Luxury" }
Run Code Online (Sandbox Code Playgroud)
我想到了以下几点。
interface MyInterface {
[key: string]: string;
}
Run Code Online (Sandbox Code Playgroud)
但是对我来说,这表示对象只能具有一个属性(名称不同),而不是它们可以具有多个属性(名称不同)。
做到这一点的最佳方法是什么?请注意,我无法控制调用我的 API 的代码将使用哪些属性名称。调用者可以使用他们想要的任何属性名称。
您interface可能看起来只接受一个必须为 type 的属性string,但这实际上是用于定义具有任意数量属性的接口的语法,这些属性都具有相同的特征(字符串作为键和字符串作为值)。这称为可索引类型(归功于@axiac,我不知道它有名字)。
因此,保持界面原样没有任何问题:
interface MyInterface {
[key: string]: string;
}
Run Code Online (Sandbox Code Playgroud)
Typescript 带有一个名为Record的本机实用程序类型,它可以归结为相同的内容,但更简洁:
type MyInterface = Record<string, string>;
Run Code Online (Sandbox Code Playgroud)
功能上两者没有区别,选择哪一个就看个人喜好了。
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |