совета:
- Есть товары 5 типов (тип ProductType - string literal union)
- Для каждого типа товара свой набор свойств (тип *tovar*Option)
Как мне типизировать функцию addToCart, если я хочу чтобы она принимала в качестве агрументов
1) Тип товара (productType: ProductType)
2) Объект с соответствующими этому типу товара опциями (???)
?
дженерики?
Уф, спасибо, буду пробовать. В теории то оно всё понятно было, а без практики хз куда чего применять :D
@ABKTPM Всё равно что-то в голове не укладывается как правильно смэтчить тип продукта с его набором свойств :( type ProductType = "shirt" | "pants" type ShirtOptions = {name: string; width: number} type PantsOptions = {name: string; height: number} function addToCart<OptionsT>(productType: ProductType, item: OptionsT) { // тут я, допустим, тайп гардом разрулю куда класть продукт, // в зависимости от его OptionT. А как мне правильно обозначить связь // "shirt" --> ShirtOptions, чтобы TS ругался, если попытаться вызвать // функцию addToCart("pants", {name: "shirtname", width: 100}) ? }
тогда типизируй как ShirtOptions | PantsOptions мб
type ShirtOptions = { name: string; width: number } type PantsOptions = { name: string; height: number } type OptionsMap = { shirt: ShirtOptions; pants: PantsOptions } function addToCart<T extends keyof OptionsMap>(productType: T, item: OptionsMap[T]) {}
Магия вне Хогвартса! Спасибо большое ❤️
Обсуждают сегодня