You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3项目接入TypeScript并使用VueUse useScroll时编译报错

问题解决步骤

核心问题定位

报错根源是Vue3项目中混入了Vue2的模板编译依赖,同时手动安装的部分构建工具与Vue CLI内置版本冲突,导致模板生成的TypeScript代码无法被正确解析;不加lang="ts"时,TS类型注解在JS环境中失效,引发useScroll无法正常工作。


1. 替换Vue2模板编译器为Vue3版本

卸载Vue2专属的vue-template-compiler,安装Vue3对应的编译工具:

npm uninstall vue-template-compiler
npm install @vue/compiler-sfc --save-dev

2. 移除冲突的手动安装依赖

Vue CLI已内置vue-loader和webpack,手动安装的版本会导致兼容问题,直接卸载:

npm uninstall vue-loader webpack

3. 清理依赖并重新安装

rm -rf node_modules package-lock.json
npm install

4. 修复useScroll的目标元素问题(可选)

router-view本身通常不是可滚动容器,若要监听页面滚动,可直接绑定到window,或指定页面内的滚动容器:

<template>
  <!-- 监听页面滚动的话,无需绑定元素,直接用useScroll() -->
  <!-- 若要监听局部容器滚动,可定义滚动容器 -->
  <div ref="scrollWrap" style="height: 100vh; overflow-y: auto;">
    <router-view />
  </div>
</template>
<script setup lang="ts">
import { useScroll } from '@vueuse/core'
import { ref } from 'vue'

// 监听局部容器
const scrollWrap = ref<HTMLElement | null>(null)
const { x, y, isScrolling } = useScroll(scrollWrap)

// 或者直接监听window:const { x, y, isScrolling } = useScroll()

// 验证功能
console.log('滚动状态:', { x, y, isScrolling })
</script>

关键说明

  • vue-template-compiler仅支持Vue2,Vue3必须使用@vue/compiler-sfc处理模板,这是编译报错的核心原因。
  • 不加lang="ts"时,ref<HTMLElement | null>这类TS语法会被当作原生JS执行,导致useScroll无法正确识别目标元素,因此功能失效。

内容的提问来源于stack exchange,提问作者Dht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:25:57