Sobes.tech
Back to tasks
Junior — Senior
26

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

Companies where asked:

ED-IT
Get help with live coding in real time with Sobes Copilot
Task condition

Необходимо разработать типизацию, которая корректно описывает два разных объекта, при этом сохраняет точные типы ключей внутри свойства 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, …> и не меняя саму структуру объектов.