Оператор сравнения в 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>
  )
}
→ Ссылка