Машинопись: как создать интерфейс на основе перечисления - PullRequest
0 голосов
/ 18 июня 2020

У меня есть перечисление EEndpoints, которое соответствует строковым адресам локальных узлов. Я хочу создать интерфейс / жестко запрограммированный объект на основе этого перечисления. Это моя идея:

export enum EEndpoints
{
    MY_REMOTE_NODE = "MY_REMOTE_NODE",
}

export interface EndpointAddresses
{
    PublisherAddress: string,
    RequestAddress: string,
}

export interface EndpointAddressList
{
    for (key in EEndpoints)
    {
        [key] = EndpointAddresses;
    }
}

Затем в моем коде мне потребуется определить константу, реализующую EndpointAddressList:

const RemoteNodeEndpoints: EndpointAddressList =
{
    MY_REMOTE_NODE: {
        PublisherAddress: "tcp://127.0.0.1:3000",
        RequestAddress: "tcp://127.0.0.1:3001",
    },
}

В качестве альтернативы было бы неплохо определить интерфейс, который сам реализует EndpointAddressList, то есть:

interface ImplementedEndpointAddressList
{
    MY_REMOTE_NODE: {
        PublisherAddress: "tcp://127.0.0.1:3000",
        RequestAddress: "tcp://127.0.0.1:3001",
    },
}

Я также открыт для обратной связи, если использование enum в качестве основы для свойств в интерфейсе является анти-шаблоном. Однако мне кажется полезным инструментом централизованное определение набора жестко запрограммированных конечных точек, а затем проверка времени компиляции того, что я настроил подсвойства этих конечных точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...