Есть ли способ избежать повсеместного дублирования строк при использовании TypeScript в облачных функциях в Firebase?
Я пытался сделать их перечислениями, и это долгий путь.
enum Collections {
SUBSCRIPTIONS = 'subscriptions-dev',
ACTIVITIES = 'activity-dev'
}
enum ActivityKey {
SUBSCRIPTION = 'sub',
GROUP_ACTIVITY_ID = 'groupActivityId',
GROUP_ACTIVITY_BOOKING_ID = 'groupActivityBookingId',
ACTIVITY_NAME = 'activityName',
ACTIVITY_START = 'activityStart',
BOOKABLE_EARLIEST = 'bookableEarliest',
BOOKABLE_LATEST = 'bookableLatest',
STATE = 'state'
};
Тогда я могу, например, сделать:
const activityRef = admin.firestore().collection(Collections.ACTIVITIES);
return await Promise.all(subscriptions.map(async (subscriptionDocument) => {
const sub = await subscriptionDocument.get();
const groupActivityProductId = sub.get(SubscriptionKey.GROUP_ACTIVITY_PRODUCT_ID);
const refreshToken = sub.get(SubscriptionKey.REFRESH_TOKEN);
...
Теперь вот проблема , когда я хочу создать или обновить траектории клавиш, используя функции set()
или update()
, он ожидает словарь - и я не могу использовать перечисления в качестве ключей в словарях.
await activityRef.doc().set({
sub: sub.ref,
groupActivityId: activity.id,
activityStart: new Date(activity.duration.start),
bookableEarliest: new Date(activity.bookableEarliest),
bookableLatest: new Date(activity.bookableLatest),
instructor: activity.instructors.empty ? "-" : activity.instructors[0].name,
lastChecked: new Date(),
activityName: activity.name,
state: ActivityState.NEW
})
Если я пишу ActivityKey.SUBSCRIPTION
в качестве ключа, я получаю ',' expected ts(1005)