Использование псевдонимов ключей в типах/интерфейсах?

#typescript

Вопрос:

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

Я использовал функцию, которая возвращает логалии, которая в основном является журналом, но с их полноразмерным аналогом.

Но есть ли способ сделать его умнее ? Например, сообщить интерфейсу, что я хочу использовать псевдоним вместо фактического значения ключа ?

Вот что я использую прямо сейчас:

 What comes out of the database:
export type Log = {
  _id: string;
  date: string;
  uid: number;
  l: string;
  dn: string;
  m: string;
  c: string;
  b: Badges;
  bi: BadgeInfo;
  e: RawEmotes;
  si: SubInfo;
  d: number;
  j: string[];
  p: string[];
  mt: MessageType;
};

What I want to use in the app:
export type LogAlias = {
  messageId: string;
  date: string;
  userId: number;
  login: string;
  displayName: string;
  message: string;
  color: string;
  badges: Badges;
  badgeInfo: BadgeInfo;
  emotes: RawEmotes;
  subInfo: SubInfoAlias;
  duration: number;
  joined: string[];
  parted: string[];
  messageType: MessageType;
};
 

Спасибо

NVH

Ответ №1:

Это НЕВОЗМОЖНО решить с помощью чистых типов, так как types из TypeScript существуют только во время компиляции и НЕ существуют во время выполнения.

Что вам нужно, так это описать форму нужного вам типа, а затем написать функцию преобразования, которая принимает входной объект и сопоставляет все «уродливые» реквизиты с их украшенными аналогами в новом объекте, который возвращается в конце.

Выполнение этого для нескольких сущностей было бы отстой, также значительно увеличит сложность вашей кодовой базы, так что … что ж, это вопрос важности и сбалансированности.

Есть и другие доступные идеи, но они еще более уродливы, чем вышеперечисленные, и при этом не дают явной выгоды.

Комментарии:

1. Спасибо тебе! Тогда я буду продолжать использовать функцию преобразования