169 похожих чатов

Привет, можете помочь с типами, хочу создать универсальную функцию для

создания компонента иконки, чтобы удобно было использовать в разных местах, со своим набором иконок (спрайтом)
то есть по итогу я хочу вывести тип name в зависимости от переданого iconTypeToIconViewBoxMap, я сделал так но это не правильно получается


//CreateIcon
import * as React from 'react'

type IconProps<TIconName> = {
name: TIconName
width?: number | 'auto'
height?: number | 'auto'
className?: string
}

type CreateIcon<TIconTypeToIconViewBoxMap extends Record<string, string>> = (
iconTypeToIconViewBoxMap: TIconTypeToIconViewBoxMap,
iconSpritePath: string,
) => React.FunctionComponent<IconProps<keyof TIconTypeToIconViewBoxMap>>

export const createIcon: CreateIcon<T> = (
iconTypeToIconViewBoxMap,
iconSpritePath,
): React.FunctionComponent<IconProps<T>> => {
return function Icon({ name, width = 'auto', height = 'auto', className }) {
return (
<svg
className={className}
viewBox={iconTypeToIconViewBoxMap[name]}
aria-hidden
width={width}
height={height}
>
<use href={iconSpritePath} />
</svg>
)
}
}

const ICON_TYPE_TO_ICON_VIEW_BOX = {
icon1: '0 0 17 17',
icon2: '0 0 17 17',

}

// Application code
const CustomIcon = createIcon(ICON_TYPE_TO_ICON_VIEW_BOX, '')

const Test = () => <CustomIcon name="" />

3 ответов

10 просмотров

похоже?

veal- Автор вопроса
Лёша Рубцов
screenshot похоже?

нет, мне нужно именно MAP передать и на его основе вывести имя (на основе ключей этой мапы)

veal- Автор вопроса
Лёша Рубцов
screenshot похоже?

о спаибо, направление хорошее было) type IconProps<TIconName> = { name: TIconName width?: number | 'auto' height?: number | 'auto' className?: string } export const createIcon = < TIconTypeToIconViewBoxMap extends Record<string, string>, >( iconTypeToIconViewBoxMap: TIconTypeToIconViewBoxMap, iconSpritePath: string, ) => { return function Icon({ name, width = 'auto', height = 'auto', className, }: IconProps<keyof TIconTypeToIconViewBoxMap>) { return ( <svg className={className} viewBox={iconTypeToIconViewBoxMap[name]} aria-hidden width={width} height={height} > <use href={iconSpritePath} /> </svg> ) } }

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
52
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше): - "п1" --- виртуальный адрес, то есть тот, который ресолвится в "п...
Toideng
3
Guys Who’s kurdish on this group?
Hiwa Amiri
11
Карта сайта