Indexed Types
有时候您会发现自己在实现重复的类型。一个常见的
例子是自动生成的 API 响应中的嵌套资源。
// 但是在这种情况下,我们无法控制 API,并且如果我们手动创建了接口,
当响应的类型更改时,ArtworkSearchResponse 的
artworks 部分 和 Artwork 可能不同步。
解决此问题的方法是索引类型(indexed types),它与 JavaScript 可以
通过字符串访问属性的方式相同。
interface ArtworkSearchResponse {
artists: {
name: string;
artworks: {
name: string;
deathdate: string | null;
bio: string;
}[];
}[];
}
// 如果接口是手工实现的,那么很容易会想到将 artworks 提取到一个接口中,类似于:
interface Artwork {
name: string;
deathdate: string | null;
bio: string;
}
type InferredArtwork = ArtworkSearchResponse["artists"][0]["artworks"][0];
// InferredArtwork 由查找属性并将新名称赋予被索引的类型的对应子集而得到。