假设我有一个 JSON 有效负载,它解析为如下内容:
{
name: "test",
items: {
"a": {
id: 1,
size: 10
},
"b": {
id: 2,
size: 34
}
}
}
我将如何设置 Example 接口的定义来建模 items 属性的值是一个对象,其键是字符串并且其值由 Item 接口定义:
export interface Example {
name: string;
items: ???;
}
export interface Item {
id: number;
size: number;
}
Typescript 允许您使用语法 [key: string]
添加对象键的类型。
如文档中所述,这些称为 indexable types:
可索引类型有一个索引签名,它描述了我们可以用来索引对象的类型,以及索引时相应的返回类型。
在您的情况下,您将使用以下内容:
export interface Item {
id: number;
size: number;
}
export interface Example {
name: string;
items: {
[key: string]: Item
};
}
作为参考,这里有一个 link to a live example。
你可以想用 Record 类型来实现
interface Item {
id: number;
size: number;
}
interface Example2 {
name: string;
items : Record<string, Item>;
}
var obj2: Example2 = {
name: "test",
items: {
"a": {
id: 1,
size: 10
},
"b": {
id: 2,
size: 34
},
"c": {
id: 3,
size: 34
}
}
}
您还将获得编译时检查:
https://i.stack.imgur.com/y4gOs.png
Item
接口?仅导出Example
接口还不够吗?Item
对使用这些类型的其他代码也有用。