vue3&typescript,shims-vue.d.ts中declare module的vue声明

webpack已经有了vue-loader这些loader了,为什么还需要declare module '*.vue'呢?

declare module 是为了告诉 tsc 这是一个"模块"。

如果不声明, IDE 里因为 tsc 类型检查, lint 会标红。

但vue-loader 是在 Webpack 构建阶段使用。IDE 做智能补全提示、还有 lint 时又不用到它vue-loader

之所以搞这么复杂,就是因为 tsc 只能识别 .js、.ts、.mjs、.json 等几种后缀的文件类型,并不"认识" .vue 文件。

所以后来为了更好地支持 TypeScript 类型推断,Vue3 中专门搞了一个 vue-tsc,用来取代默认的 tsc,就不需要你手动写一堆 declare module 了。

举例1

bash 复制代码
declare module '*.vue' {
  import { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

举例2

bash 复制代码
// my-js-module.js
function greet(name) {
  return 'Hello, ' + name;
}

module.exports = {
  greet,
};

然后你在 TypeScript 项目中引入这个模块:

bash 复制代码
// main.ts
import { greet } from 'my-js-module';

为了让 TypeScript 编译器能正确理解 my-js-module 模块的类型信息,你需要创建一个名为 my-js-module.d.ts 的类型声明文件

bash 复制代码
// my-js-module.d.ts
declare module 'my-js-module' {
  export function greet(name: string): string;
}
相关推荐
柯克七七1 小时前
给老项目加了 TypeScript,本来只想自己爽,结果全公司代码审查标准被我抬高了
前端·vue.js·typescript
自然 醒3 小时前
前端如何实现在线预览office常见文件功能?
前端·vue.js
肉肉不吃 肉3 小时前
前端调试跨域如何解决
前端·vue.js
卓怡学长4 小时前
w268基于springboot + vue 物流系统
java·数据库·vue.js·spring boot·spring·intellij-idea
子兮曰19 小时前
TypeScript 7.0 RC 深度解读:Go 重写完成,10 倍提速,编译器的「奇点时刻」
前端·后端·typescript
迅速的自行车19 小时前
从一段模板说起
前端·javascript·vue.js
BAIGAOa20 小时前
不止 React:我开源了一个框架无关的终端键盘引擎,Vue/Svelte 都能用
typescript
小蚂蚁i20 小时前
把 TypeScript 内置工具类型彻底搞懂,顺便自己封几个好用的
前端·typescript
爸爸61920 小时前
07 ArkTS 基础类型与接口定义:从 TypeScript 到鸿蒙的类型升级
javascript·华为·typescript·harmonyos·鸿蒙系统
阿奇__1 天前
uniapp微信小程序图片上传含回显组件(拍照,相册)
前端·javascript·vue.js