问题原因
波浪线警告通常由以下原因导致:
- TypeScript 无法识别 UniApp 的自定义标签(如
<view>
,<text>
) - 缺少 UniApp 类型声明文件(
.d.ts
) - 编辑器未正确解析 Vue + TypeScript 语法(VS Code 插件配置问题)
解决方案
1. 安装官方类型声明包
npm install @dcloudio/types -D
2. 配置 tsconfig.json
{
compilerOptions: {
types: [@dcloudio/types],
lib: [esnext, dom],
paths: {
@/*: [./src/*]
}
},
include: [
src/**/*.ts,
src/**/*.vue,
src/**/*.d.ts,
auto-imports.d.ts
]
}
3. 创建类型声明文件
在项目根目录下新建 shims-vue.d.ts
:
// shims-vue.d.ts
declare module '*.vue' {
import type { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
}
// 声明 UniApp 原生组件
declare namespace JSX {
interface IntrinsicElements {
view: any;
text: any;
image: any;
button: any;
// 其他 UniApp 组件...
}
}
4. 配置 VS Code 插件
- 安装 Volar(禁用 Vetur)
- 在
.vscode/settings.json
中添加:
{
typescript.tsdk: node_modules/typescript/lib,
vue.experimental.templateInterpolationService: true
}
5. 验证标签语法
确保标签符合 UniApp 规范:
<!-- 正确示例 -->
<view class=container>
<text>Hello UniApp</text>
</view>
<!-- 错误示例(闭合标签不匹配) -->
<view> // ❌ 缺少闭合标签
<text>Error</view> // ❌ 标签嵌套错误
进阶配置
1. 自定义组件类型提示
对第三方组件库(如 uview-ui
),添加类型声明:
// components.d.ts
declare module 'uview-ui' {
export const uButton: any;
export const uInput: any;
// 其他组件声明...
}
2. 条件编译兼容
在 jsconfig.json
中声明全局变量:
{
compilerOptions: {
types: [@dcloudio/types],
baseUrl: .,
paths: {
@/*: [./src/*]
}
},
exclude: [node_modules, unpackage]
}
常见问题排查
现象 | 解决方案 |
---|---|
组件属性提示缺失 | 检查组件是否注册,或手动添加类型声明 |
@dcloudio/types 未生效 |
重启 VS Code,确保 tsconfig.json 中 types 字段包含该包 |
Volar 不工作 | 禁用 Vetur,确保 VS Code 版本 ≥ 1.70 |
条件编译报错 | 在 globals.d.ts 中声明全局变量:declare const MP_WEIXIN: boolean; |