Оператор сравнения в Typescript
Интересный вопрос, есть оператор сравнения в typescript?
Пример задаччи:
type SomeType = Readonly<{
iconType: 'copy' | 'edit'
copy: ActionButtonInterface['iconType'] == 'copy' ? string : never
onClick: ActionButtonInterface['iconType'] == 'edit' ? () => void : never
}>
Основной смысл идеи, в том, чтобы при разных аргументах выставлять обязательность полей
Ответы (1 шт):
Автор решения: user447630
→ Ссылка
Эту задачу решают обыкновенные обьединения из TypeScript
Спасибо за наводку @nörbörnën
Вот видео об этом
Вот пример:
import React from 'react'
import { PancelIcon, CopyIcon, BucketIcon } from 'icons'
import { IconButton, IconButtonProps } from 'uikit'
const iconTypes = {
edit: PancelIcon,
copy: CopyIcon,
delete: BucketIcon,
}
type CopyType = { iconType: 'copy'; copyText: string }
type EditType = { iconType: 'edit'; onClick: () => void }
type DeleteType = { iconType: 'delete'; onClick: () => void }
type ActionButtonProps = Omit<IconButtonProps, 'children' | 'form' | 'small'> &
(CopyType | EditType | DeleteType)
export const ActionButton = (props: ActionButtonProps) => {
if (props.iconType === 'copy') {
console.log(props.copyText)
}
if (props.iconType === 'edit') {
console.log(props.onClick)
}
const Icon = iconTypes[props.iconType]
return (
<IconButton {...props} form='circle' size='small'>
<Icon />
</IconButton>
)
}