TLDR: Как создать интерфейс для нормализованных данных?
Я создаю приложение React с использованием TypeScript.Я использую Normalizr для нормализации данных из моих вызовов API.
Чтобы привести пример из документации, ответ API выглядит следующим образом:
Быстрый старт Рассмотрим типичный блогсообщение.Ответ API для одного сообщения может выглядеть примерно так:
{
"id": "123",
"author": {
"id": "1",
"name": "Paul"
},
"title": "My awesome blog post",
"comments": [
{
"id": "324",
"commenter": {
"id": "2",
"name": "Nicole"
}
}
]
}
Может быть нормализовано к этому:
{
result: "123",
entities: {
"articles": {
"123": {
id: "123",
author: "1",
title: "My awesome blog post",
comments: [ "324" ]
}
},
"users": {
"1": { "id": "1", "name": "Paul" },
"2": { "id": "2", "name": "Nicole" }
},
"comments": {
"324": { id: "324", "commenter": "2" }
}
}
}
Я хотел бы создать интерфейсы для своих функций, которые используют Normalizr.Вот что я пробовал до сих пор:
export interface House {
uuid: string;
address: string;
}
export interface Citizen {
uuid: string;
name: string;
}
export interface NormalizedData<T> {
[uuid: string]: T;
}
export interface Entity<T> {
[name: string]: NormalizedData<T>;
}
export interface NormalizerResult<T> {
result: any;
entities: Entity<T>;
}
Так как здесь я должен дать универсальный тип T, этот подход может обрабатывать только одну сущность.Проблема в том, что ключ сущностей может иметь несколько сущностей разных типов, например.Дом и гражданин (и многое другое).Как я могу объяснить это?Собственные типы нормализатора просто возвращают { result: any, entities: any }
.