Sobes.tech
Назад к задачам
Junior — Senior
27

Определение типов для объектов с фиксированными ключами эндпоинтов

Компании, где спрашивали:

ED-IT
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Необходимо разработать типизацию, которая корректно описывает два разных объекта, при этом сохраняет точные типы ключей внутри свойства endpoints. Стандартные подходы вроде key: string или Record<string, ...> не подходят, так как они размывают конкретные имена методов.

Предполагается, что набор ключей эндпоинтов известен на этапе компиляции для каждого объекта:

  • для vtemplateObjectgetVtemplates и postVtemplates;
  • для reportObjectgetReports и putReports.

Задача состоит в том, чтобы описать типы так, чтобы TypeScript «знал», какие именно свойства находятся внутри endpoints, не меняя базовый тип объектов.

//-- 1 -- Задаёт структуру объектов, не знает про конкретные объекты и их методы


//-- 2 -- Не может менять базовый тип, но знает про структуру объекта который типизирует

const vtemplateObject = {
    entity: "vtemplate",
    endpoints: {
        getVtemplates: {
            method: "GET",
            url: "vtemplate"
        },
        postVtemplates: {
            method: "POST",
            url: "vtemplate"
        }
    }
}

const reportObject = {
    entity: "report",
    endpoints: {
        getReports: {
            method: "GET",
            url: "report"
        },
        putReports: {
            method: "PUT",
            url: "report"
        }
    }
};

Требуется построить тип (или набор типов), который будет принимать такие объекты и сохранять точные типы их эндпоинтов, не прибегая к обобщённым Record<string, …> и не меняя саму структуру объектов.