#javascript #typescript #vue.js #flickity #vue-flickity
Вопрос:
Я объявляю переменную с типом any
в начале моего <script>
, а позже ссылаюсь на нее в одном из своих методов в этом же <script>
. Моя среда разработки вообще не жалуется, но, к моему удивлению, я вижу ошибку во время выполнения в своей консоли: ReferenceError: flik is not defined
.
Может быть, это как-то связано с условием гонки вокруг создания экземпляра переменной в течение жизненного цикла Vue? Это сбивает с толку, потому что у меня нет этой проблемы с использованием аналогичного шаблона в других местах. Что не так с моим кодом ниже?
<script lang="ts">
import Flickity from "./widgets/Flickity.vue";
declare var flik: any
export default defineComponent({
components: {
Flickity
},
methods: {
addElement() {
flik = this.$refs.flickity //ERROR HERE: flik is undefined
flik.append(this.makeFlickityCell())
},
makeCell() {
const cell = document.createElement('div');
cell.className = 'carousel-cell'
cell.textContent = "Hi"
return cell
}
},
mounted() {
this.addElement()
}
});
</script>
Ответ №1:
Я не вижу необходимости в declare
здесь, которое фактически сообщает компилятору TypeScript, который flik
уже объявлен в другом месте (например, это глобальный).
Просто используйте утверждение типа как any
:
(this.$refs.flickity as any).append(this.makeFlickityCell())
Комментарии:
1. Хм, попытка этого подхода «работает», но вместо этого вызывает другую ошибку во время выполнения в этой строке:
Cannot read property 'append' of undefined
2. Рад, что это сработало для тебя. Новая ошибка подразумевает, что ссылка на шаблон не существует и выходит за рамки этого вопроса. Обратите внимание, что ошибка вызвана не машинописным текстом.