@700Hp

Как корректно импортировать функцию typescript(2698) vue 3?

Код ошибки:
TS2698: Spread types may only be created from object types.
    33 |     return {
    34 |       contact,
  > 35 |       ...useHandleClick(handleClick)
       |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    36 |     }
    37 |   }


Код функции:
import { onMounted, onBeforeUnmount } from 'vue'

interface IFunction {
  (e: Event): void
}

export function useHandleClick (fn: IFunction): void {
  onMounted(() => {
    document.addEventListener('click', fn)
  })

  onBeforeUnmount(() => {
    document.removeEventListener('click', fn)
  })
}


Код компонента:
const handleClick = (event: Event): void => {
      const target = event.target as Element
      if (target.closest('button') || target.closest('.contact')) return
      emit('close')
    }

    // noinspection JSVoidFunctionReturnValueUsed
    return {
      ...useHandleClick(handleClick)
    }
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 2
@GrayHorse
Spread types may only be created from object types.


И что здесь спреадится? undefined.

В этом закосе по хуки реакта (useSomething) делается так — возвращается объект, чьи поля присваиваются другому объкту путем оператора спреад.

Примеры можно посмотреть в VueUse, например:
github.com/vueuse/.../useMemory/index.ts#L41-L53
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы