#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. Спасибо тебе! Тогда я буду продолжать использовать функцию преобразования