TypeScript系列, 通过vue3实例说说declare module语法怎么用[模块声明篇]

这篇具有很好参考价值的文章主要介绍了TypeScript系列, 通过vue3实例说说declare module语法怎么用[模块声明篇]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欠你们的

本系列文章是我20年开始写的, 这个模块声明也是本系列的最后一课, 中间因为时间安排间隔了1年, 当时答应大家要补充的, 现在来还债😊.

中间的时间我写了vue3的入门教程, 现在写了一半了吧, 带视频的, 如果有需要的小伙伴可以去看看. https://www.yuque.com/books/share/c0ab3348-87ab-4e77-a34e-10ede7dfb00e?# 《vue3知识点"精选"》

往期目录

第一课, 体验typescript

第二课, 基础类型和入门高级类型

第三课, 泛型

第四课, 解读高级类型

第五课, 命名空间(namespace)是什么

特别篇, 在vue3🔥源码中学会typescript🦕 - "is"

第六课, 什么是声明文件(declare)? 🦕 - 全局声明篇

第七课, 通过vue3实例说说declare module语法怎么用🦕模块声明篇

新开发vscode插件: ⚡any-type, 一键json到ts类型

使用场景

npm下载的"包"自带了声明文件, 如果我们需要对其类型声明进行扩展就可以使用"declare module"语法.

让vue3支持this.$axios

typescript // main.ts app.config.globalProperties.$axios = axios; 功能上我们实现了"this.$axios", 但是ts并不能自动推断出我们添加了$axios字段, 所以添加如下声明文件: ```typescript // global.d.ts

// axios的实例类型 import { AxiosInstance } from 'axios'

// 声明要扩充@vue/runtime-core包的声明. // 这里扩充"ComponentCustomProperties"接口, 因为他是vue3中实例的属性的类型. declare module '@vue/runtime-core' {

// 给this.$http提供类型 interface ComponentCustomProperties { $axios: AxiosInstance; } } ``` 这里扩充"ComponentCustomProperties"接口, 因为他是vue3中实例的属性的类型.

更全面的例子

上面的例子中我们扩充了原声明中的interface, 但是如果导出是一个Class我们该如何写呢? 下面我们对"any-touch"的类型进行扩充, 这里"any-touch"的默认导出是一个Class. 假设我们对"any-touch"的代码做了如下修改:

  1. 导出增加"aaa"变量, 是string类型.
  2. 类的实例增加"bbb"属性, 是number类型.
  3. 类增加静态属性"ccc", 是个函数. ```typescript // global.d.ts

// AnyTouch一定要导入, 因为只有导入才是扩充, 不导入就会变成覆盖. import AnyTouch from 'any-touch'

declare module 'any-touch' { // 导出增加"aaa"变量, 是个字符串. export const aaa: string;

export default class {
  // 类增加静态属性"ccc", 是个函数.
  static ccc:()=>void
  // 类的实例增加"bbb"属性, 是number类型.
  bbb: number
}

} ``` 注意: AnyTouch一定要导入, 因为只有导入才是类型扩充, 不导入就会变成覆盖. ​

测试下, 类型都已经正确的添加: ```typescript // index.ts import AT,{aaa} from 'any-touch';

const s = aaa.substr(0,1);

const at = new AT(); at.bbb = 123;

AT.ccc = ()=>{}; ```

对非ts/js文件模块进行类型扩充

ts只支持模块的导入导出, 但是有些时候你可能需要引入css/html等文件, 这时候就需要用通配符让ts把他们当做模块, 下面是对".vue"文件的导入支持(来自vue官方): typescript // global.d.ts declare module '*.vue' { import { DefineComponent } from 'vue' const component: DefineComponent<{}, {}, any> export default component } typescript // App.vue // 可以识别vue文件 import X1 from './X1.vue'; export default defineComponent({ components:{X1} }) 声明把vue文件当做模块, 同时标注模块的默认导出是"component"类型. 这样在vue的components字段中注册模块才可以正确识别类型.

vuex

下面是vuex官方提供的, 在vue的实例上声明增加$store属性, 有了前面的支持, 看这个应该很轻松. ```typescript // vuex.d.ts

import { ComponentCustomProperties } from 'vue' import { Store } from 'vuex'

// 声明要扩充@vue/runtime-core包的声明 declare module '@vue/runtime-core' { // declare your own store states interface State { count: number }

// provide typings for this.$store interface ComponentCustomProperties { $store: Store } } ```

并非全部内容

到此声明的内容就都结束了, 但实际上还有些"模块声明"的方式并没有覆盖到, 因为本课程的最终目的是基于vue3开发暂不涉猎npm包的开发,所以其他的内容就不展开了, 有需要的同学可以看ts文档来学习, 有了本文的基础, 相信你会很轻松学会更多.

微信群

感谢大家的阅读, 如有疑问可以加我微信, 我拉你进入微信群(由于腾讯对微信群的100人限制, 超过100人后必须由群成员拉入)

github

我个人的开源都是基于ts的, 欢迎大家访问https://github.com/any86

TypeScript系列, 通过vue3实例说说declare module语法怎么用[模块声明篇]文章来源地址https://www.toymoban.com/news/detail-421581.html

到了这里,关于TypeScript系列, 通过vue3实例说说declare module语法怎么用[模块声明篇]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过实例了解vue3.3更新的特征

    开场白 准备新新特征的环境 使用vite来学习vue3.3的新特征 插件 script setup + TypeScript 开发体验改善 解析导入的类型,并支持有限的复杂类型 需要注意的点 类型的扩展 需要注意的点 通用组件-组件可以接收泛型参数 多个泛型 defineEmits的优化--现在 defineEmits以前的写法 尾声

    2024年02月07日
    浏览(34)
  • Vue3集成ThreeJS实现3D效果,threejs+Vite+Vue3+TypeScript 实战课程【一篇文章精通系列】

    这是一个使用Vue3,TypeScript,Vite和Three.js的项目。Vue3是一个流行的JavaScript框架,用于构建用户界面。TypeScript是一种静态类型的编程语言,它是JavaScript的超集,可以编译成纯JavaScript。Vite是一个由Evan You开发的新的前端构建工具,能够提供快速的冷启动和即时热更新。 Three.j

    2024年02月03日
    浏览(53)
  • 说说如何在Vue项目中应用TypeScript?

    与link类似 在 VUE 项目中应用 typescript ,我们需要引入一个库 vue-property-decorator , 其是基于 vue-class-component 库而来,这个库 vue 官方推出的一个支持使用 class 方式来开发 vue 单文件组件的库 主要的功能如下: methods 可以直接声明为类的成员方法 计算属性可以被声明为类的属性

    2024年03月16日
    浏览(51)
  • Vue3 + TypeScript + Uniapp 开发小程序【医疗小程序完整案例·一篇文章精通系列】

    当今的移动应用市场已经成为了一个日趋竞争激烈的领域,而开发一个既能在多个平台上运行,又能够高效、可维护的应用则成为了一个急需解决的问题。 在这个领域中,Vue3 + TypeScript + Uniapp 的组合已经成为了一种受欢迎的选择,特别是在开发小程序方面。Vue3 作为一个现代

    2024年02月09日
    浏览(44)
  • 前端经典面试题 | 吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解

    🖥️ 前端经典面试题 专栏:吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答

    2024年01月17日
    浏览(48)
  • VUE报错解决Could not find a declaration file for module ‘xxx‘.

    Github上下载的代码,导入后出现以下报错。    错误代码 Could not find a declaration file for module \\\'element-plus/dist/locale/zh-cn.mjs\\\'. \\\'c:/Users/Lenovo/typescript/hotel/hotel-system-web-main/node_modules/element-plus/dist/locale/zh-cn.mjs\\\' implicitly has an \\\'any\\\' type. If the \\\'element-plus\\\' package actually exposes this module, try ad

    2024年02月12日
    浏览(47)
  • 安装vite框架,报错“Cannot find module ‘./App.vue‘ or its corresponding type declaration” 问题解决方法

    代码编辑器:vscode ,使用vue3,所以安装了 Volar 插件,可以使 vue 代码高亮显示,不同颜色区分代码块,以及语法错误提示等 提示:如果使用的是vue2,则使用 Vetur 插件;使用 vue3 的话 ,要禁用 Vetur 插件,然后用 Volar 插件。两个插件不要同时使用,会冲突。 报错描述: 安装

    2024年02月11日
    浏览(53)
  • 前端vue3+typescript架构

    1、vue creat 项目名称 选择自定义  选择需要的依赖  选择vue3  一路enter,选择eslist+prettier  继续enter,等待安装 按步骤操作,项目启动成功  2、vscode安装5款插件  2、代码保存自动格式化,保证每个开发人员代码一致,根目录新建三个文件.editorconfig和.prettierrc和.prettierignore

    2024年02月11日
    浏览(39)
  • TypeScript中的类型声明declare

    在 TypeScript 中, declare 用于定义 全局 变量、函数和类型等 ,提供了一种在编译过程中告诉TypeScript编译器某个标识符的类型的方式。它告诉编译器:虽然它在当前文件中没有声明,但它在其他地方已经存在了。也就是说,declare让 编译器 知道 这些声明的实体是在编译

    2024年02月12日
    浏览(47)
  • Vue3项目中没有配置 TypeScript 支持,使用 TypeScript 语法

    1.安装 TypeScript:首先,需要在项目中安装 TypeScript。在终端中运行以下命令 2.创建 TypeScript 文件:在 Vue 3 项目中,可以创建一个以 .ts 后缀的文件,例如 MyComponent.ts。在这个文件中,可以使用 TypeScript 语法编写代码。 在上面的示例中,我们使用 defineComponent 函数来定义一个

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包