Этот вопрос закрыт для ответов, так как повторяет вопрос Почему ругается TypeScript?
dicem
@dicem

Почему TypeScript не допускает методы DOM элементов для Vue Ref'ов?

Ошибка собственно в методе Vue компонента:
methods: {
...
  dropdownTrigger (e: Event | undefined) {
      if (e) {
        e?.stopPropagation()

        this.$refs.list.scrollTo(0, 0)
        this.isListVisible = !this.isListVisible
        if (!this.isListVisible) this.$refs.input.blur()
        this.selected = this.value
          ? [...this.value]
          : []
      }
  },
...
}

Ошибка указывающая на this.$refs.list.scrollTo(0, 0):
Property 'scrollTo' does not exist on type 'Vue | Element | Vue[] | Element[]'.
Property 'scrollTo' does not exist on type 'Vue'.ts(2339)


Использую дефолтный Nuxt + TypeScript, в @types есть 2 файла:
vue-shim.d.ts

declare module '*.vue' {
  import Vue from 'vue'
  export default Vue
}


tsx-shim.d.ts

import Vue, { VNode } from 'vue';

declare global {
  namespace JSX {
    interface Element extends VNode {}
    interface ElementClass extends Vue {}
    interface IntrinsicElements {
      [element: string]: any;
    }
  }
}

  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
yarkov
@yarkov Куратор тега Vue.js
Проект "Жизнь после смерти" - lifeafterdeath.ru
Property 'scrollTo' does not exist on type 'Vue | Element | Vue[] | Element[]'

Ну так всё же написано )) Тип рефа Vue | Element | Vue[] | Element[]
Если точно знаете что это за элемент, то попробуйте так:
(this.$refs.list as HTMLDivElement).scrollTo(0, 0)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dicem
@dicem Автор вопроса
Также отличное решение в дополнение к ответу Алексей Ярков
import Vue, { VueConstructor, VNode} from 'vue'

interface Refs {
  $refs: {
    list: HTMLElement,
    input: HTMLInputElement,
  }
}

export default (Vue as VueConstructor<Vue & Refs>).extend({
  ...
  methods: {
    dropdownTrigger (e: Event | undefined) {
      this.$refs.list.scrollTo(0, 0) // наконец то отлично отрабатывает
    }
  }
  ...
})
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы