Untitled

 avatar
unknown
typescript
2 years ago
1.6 kB
4
Indexable
// типизация, которую я пишу
type PageNames = 'MainPage' | 'CheckoutPage' | 'ProfilePage' | 'CartPage'  // список идентификаторов страниц
type PagaNamesMap<T> = Partial<Record<PageNames, T>>


// ниже кусок из какого-то контроллера, который работает на всех страницах
type AnalyticScreenName = 'checkout' | 'cart_main' // названия страниц, используемые в аналитике, импортируется откуда-то снаружи


// на некоторых страницах надо отправить аналитику, в аналитике свои имена страниц, у нас свои. Мы не можем сделать одинаковые по историческим причинам
const analiticsMapping: PagaNamesMap<AnalyticScreenName> = { // вот тут без Partial ругается, что не все ключи добавлены в объект
    CheckoutPage: 'checkout',
    CartPage: 'cart_main'
}

let currentPage: PageNames = Math.random() > 0.5 ? 'MainPage' : 'CartPage' // идентификатор текущей страницы, берется 

if(analiticsMapping[currentPage]) {
    const res: {analyticPage: AnalyticScreenName} = {
        analyticPage: analiticsMapping[currentPage] // вот тут из-за использования Partial  possibly undefined
    }

    // отправляется какая-то аналитика с res в нагрузке
}
Editor is loading...
Leave a Comment