TypeScript 第三部分 扩展

1. 声明文件

  • 主要作用:
    1. 类型声明:为库或模块提供类型信息。
    2. 全局声明:为全局作用域中的类型和变量提供声明。
    3. 类型兼容性:确保第三方库或自定义代码的类型正确性。
    4. 代码提示与检查:在开发环境中提供更好的代码提示和类型检查。
      通过使用 .d.ts 文件,可以显著提高 TypeScript 项目的类型安全性和开发体验。
  1. .d.ts文件

    称为类型声明类型定义文件

    • .d.ts文件的来源
      1. 内置。例如:typescript包中自带的ES6的声明文件
      2. 第三方库。通过npm安装的包里面
      3. 自定义。自己写的.d.ts文件
  2. 第三方库的声明文件
    • 库中本身包含声明文件,例如:axios通过import axios from "axios"; 就可以引入
    • 如果第三方库中没有包含声明文件,可以去yarn官网查找,推荐使用yarn包管理工具
    • 自定义第三方库的声明文件

2. 自定义声明文件

  • 声明文件的文件后缀:.d.ts
  • 关键字declare 用于声明全局变量、类型、函数、类或模块,告诉TypeScript编译器这些声明已经存在于运行时环境中。

declaretype和interface的区别:

  • type和interface重点在于结构,某一个变量、函数、类的结构
  • declare重点在于告诉整个项目,某一个变量、类、模块存在,让ts可以识别,同时说明它们是什么类型,有什么方法、属性可以使用

1. 声明常量、变量、函数、类

  • 在什么情况下需要声明
    • 假设main.ts想要使用index.js文件中的数据,通常我们使用import来导入index.js文件便于使用index.js文件中的数据。
    • 那么现在就不使用import,假设在一个html文件<script>中引入了index.jsmain.ts两个文件,虽然这两个文件都被引入了同一个html文件中,但是main.ts并不知道index.js 有什么类型的数据,根本无法使用,这时候需要.d.ts文件来声明index.js文件中的数据,声明后main.ts文件中就可以使用了
    • 总结:已经知道有一个可以使用的数据(数据的结构可以是常量、变量。。。),多个ts文件想要使用,或者说没有必要引入,就可以使用声明的方式来使用
  • 声明文件
// 声明变量
declare let userName: string;
// 声明常量
declare const OK: boolean
// 声明函数
declare function getInfo(id: number): string;
// 声明类
declare class User {constructor(public id: number, public name: string);
} 
  • index.js文件中的内容
const OK = true // 常量let userName = 'zhangsan'	// 变量
function getInfo(id){	// 函数return 'lisi'
}
function User(id, name){	// 类this.id = idthis.name = name
}
  • main.ts文件
// 使用变量
console.log(userName)
// 使用常量
console.log(OK)
// 使用函数
console.log(getInfo(1))
// 类
const user = new User(1, 'zhangsan')
console.log(user)
  • 结果
zhangsan
true
lisi
User {id: 1, name: 'zhangsan'}

2. 声明资源类文件

示例:导入图片

  • 声明文件
// 声明文件模块
declare module "*.png"
declare module "*.jpg"
declare module "*.jpeg"
declare module "*.gif"
  • mani.ts
import meiNv from './assets/111.jpg' // 如果没有声明.jpg文件,这里报错
const dom = document.createElement('img')
dom.src = meiNv
document.body.appendChild(dom)// 导入图片需要在webpackconfig.js中配置打包规则
module: {rules: [{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: 'asset/resource',},]
}

3. 声明模块

  • 用法略有不同,声明的模块需要使用import导入
// 声明模块,重点在于模块中所导出的东西,说明在这个模块中有些什么东西可以使用
declare module "myModule" {export function foo(): void; // 模块中的函数export const bar: number; // 模块中的常量export class Foo {} // 模块中的类
}
  • main.js
import myModule from "myModule"; // 引入模块myModule.foo();	// 使用模块中的数据
myModule.bar = 20
new myModule.Foo()

4. 声明文件

  • 使用import App from './App.vue'时会报.vue类型错误,因为ts不认识.vue文件,所以声明.vue文件是DefineComponent类型,这样就不会报错了
// 声明'.vue'文件
declare module ".vue" {import { DefineComponent } from 'vue'const component: DefineComponentexport default component
}

3. tsconfig.json

1. 作用

  • 让tsc编译代码的时候,知道如何去编译ts文件同时做类型检测
    • 比如是否允许不明确的this选项,是否允许含有隐式的any类型
    • 编译后的js代码是什么版本?ES3、ES5?
  • 编辑器同时也在读取该文件,用于代码检测,提示错误
  • 有该文件的目录,会被识别为ts项目的根目录

2. 在编译时如何被使用

  • 在命令行输入tsc命令,会在目录中寻找tsconfig.json文件,读取到配置后,会将该目录下的所有ts文件按照config中的配置编译为js文件
    • 如果tsc后面加了参数或者文件名,则tsc不会读取config文件
  • webpack使用ts-loader进行打包时,读取config文件,根据config中的配置来编译ts文件

3. tsconfig中的配置项

官网介绍链接

"module": "commonjs"	// 最终生成的代码使用的模块化
"esModuleInterop": true,   // es module 和 commonjs可以互相调用,有些库使用commonjs,而我们的项目使用es module,在项目中可以使用import导入commonjs
"strict": true, 	// 严格的类型检测
"skipLibCheck": true      // 是否跳过.d.ts文件中的类型检测
"allowJs": true, 	// 是否允许在ts文件中使用js代码
"jsx": "preserve", 	// jsx的处理方式(preserve:保留原有的jsx格式)
"importHelpers": true,  // 是否导入一些需要的功能模块
"moduleResolution": "node10",	// 在import ··· from 'XXX' 时,指定查找XXX的规则
"allowSyntheticDefaultImports": true
/*  导出时:export {aa, bb, cc}导入时:import * as x from 'index.js' 使用时:x.aa x.bb 
如果配置为 true可以使用:import x from 'index.js' 写法 
*/
"sourceMap": true, 	// 是否生成映射文件
// 作用:在ts文件与编译好的js文件之间做映射,可以方便的查找报错后对应的ts代码的位置
"baseUrl": ".", // 设置基本路径,基本路径设置为当前项目的根目录,如不设置,默认指定的也是根路径
"paths": {"@/*": ["src/*"]  // 设置路径别名,"src/*"是从根路径开始,根路径是baseUrl指定的
}

搭建webpack环境

在html页面中运行javascript

  • node项目初始化
pnpm init -y
  • 安装webpack及相关插件
pnpm add webpack webpack-cli webpack-dev-server -D
  • 安装ts-load,并初始化ts配置文件
// 初始化ts环境,无法执行,需要全局安装typescript
tsc --init
// 全局安装typescript
pnpm install tapyescript -g// 安装ts-load,webpack中
  • 安装html-webpack-plugin
pnpm add html-webpack-plugin -D
  • package.json
{"name": "ts-webpack","version": "1.0.0","main": "index.js","scripts": {"dev": "webpack server --mode development --open --hot"},"author": "","license": "ISC","description": "","devDependencies": {"html-webpack-plugin": "^5.6.0","ts-loader": "^9.5.1","webpack": "^5.95.0","webpack-cli": "^5.1.4","webpack-dev-server": "^5.1.0"}
}
  • webpack.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const config = {mode: "development",entry: "./src/index.ts",//入口文件output: {// build时,打包目录filename: "bundle.js",path: path.resolve(__dirname, "./dist"),},resolve: { // import 这些文件时,可以省略后缀extensions: [".json", ".ts", ".js","cjs"],},module: {rules: [// 以.ts结尾的文件,指定使用ts-loader加载器来处理{test: /\.ts$/,loader: "ts-loader",},],},plugins: [new HtmlWebpackPlugin({ //把入口文件编译成js后注入到指定的模板文件的,指定位置,这里指定的是bodytemplate: "./index.html", // 指定模板文件filename: "index.html", // 输出文件名inject: "body", // 注入的位置,}),],
};module.exports = config;
  • 目录结构
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1553041.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机人体反应速度测试仪系统

** 文章目录 前言概要设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

CSP-J Day 2 模拟赛补题报告

upd: T4 重新上传 AC 代码&#xff0c;一开始的有 hack。 姓名&#xff1a;王胤皓&#xff0c;校区&#xff1a;和谐校区&#xff0c;考试时间&#xff1a; 2024 2024 2024 年 10 10 10 月 2 2 2 日 9 : 00 : 00 9:00:00 9:00:00~ 12 : 30 : 00 12:30:00 12:30:00&#xff…

简单理解程序地址空间:Linux 中的内存映射与页表解析

ps: Linux操作系统对于程序地址&#xff0c;物理地址的处理&#xff0c;对于源码&#xff0c;我也看不大懂&#xff0c;只是截取当我们进程发生正常缺页中断的时候的调用情况。本文中所有的源码都是进行截取过的&#xff0c;如果大家感兴趣可以去下载源码。 在Linux 操作系统 …

【Burp入门第三十三篇】IP Rotate 插件实现IP轮换爆破

Burp Suite是一款功能强大的渗透测试工具,被广泛应用于Web应用程序的安全测试和漏洞挖掘中。 本专栏将结合实操及具体案例,带领读者入门、掌握这款漏洞挖掘利器 读者可订阅专栏:【Burp由入门到精通 |CSDN秋说】 文章目录 正文安装步骤使用步骤应用场景实战文章正文 在 Burp…

留存率的定义与SQL实现

1.什么是留存率 留存率是指在特定时间段内&#xff0c;仍然继续使用某项产品或服务的用户占用户总数的百分比。 通常&#xff0c;留存率会以日&#xff0c;周&#xff0c;或月为单位进行统计和分析。 2.SQL留存率常见问题 1.计算新用户登录的日期的次日留存率以及3日留存率 …

假期惊喜,收到公司款项86167.14元

假期惊喜 近日&#xff0c;有网友爆料称&#xff0c;比亚迪在未提前通知员工的情况下&#xff0c;突然发放了利润奖金。 有人获得了七八万元&#xff0c;也有人拿到了十多万元。 一位比亚迪员工的帖子显示&#xff0c;在9月26日下午&#xff0c;他的银行卡突然收到一笔 86167.1…

知识图谱入门——4:Protégé 5.6.4安装和主要功能介绍、常用插件(2024年10月2日):知识图谱构建的利器

Protg 是斯坦福大学开发的一款开放源代码的本体编辑工具。它为构建、共享和管理本体&#xff08;Ontologies&#xff09;提供了一个强大的平台&#xff0c;广泛应用于语义网、知识管理、自然语言处理等领域&#xff0c;特别是知识图谱的开发和管理。Protg 支持 OWL&#xff08;…

解决问题AttributeError: “safe_load“ has been removed, use

解决问题AttributeError: "safe_load" has been removed, use~ 1. 问题描述2. 解决方法 1. 问题描述 在复现cdvae代码时&#xff0c;运行 python scripts/compute_metrics.py --root_path MODEL_PATH --tasks recon gen opt评估模型时&#xff0c;出现以下问题。 …

【优选算法】(第十六篇)

目录 连续数组&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 矩阵区域和&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 连续数组&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCode&a…

Java--IO基本流

IO流 概述 生活中&#xff0c;你肯定经历过这样的场景。当你编辑一个文本文件&#xff0c;忘记了ctrls &#xff0c;可能文件就白白编辑了。当你电脑上插入一个U盘&#xff0c;可以把一个视频&#xff0c;拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢&#xff1f;键盘…

汇总binder相关一些常见面试题-安卓系统常见面试题

背景&#xff1a; 国庆前有几个学员朋友在群里讨论了几个binder相关的面试题&#xff0c;讨论较为激烈&#xff0c;这里马哥统一整理一下列出来了&#xff0c;并且也补充了几个&#xff0c;大家有兴趣的可以尝试做一下&#xff0c;后续方便每个学员进行查缺补漏。后续会进行整…

JSP(Java Server Pages)基础使用三(表单传参)

表单传参 1.这次学习的是我们在网络上使用次数相对来说很多的jsp的使用方式&#xff0c;表单传参是运用了form表单的post方法来讲表单中的数据传递给action页面,action的作用是跳转就类似a标签&#xff0c;当然action不只可以是页面&#xff0c;还可以是后端类&#xff0c;用来…

如何解决 Photoshop 中的“暂存盘已满”错误

好久没有用Photoshop了&#xff0c;今天想自己修个图&#xff0c;就启动了一下PS&#xff0c;结果出现一个对话框“不能初始化Photoshop&#xff0c;因为暂存盘已经满”。我一直存在C盘焦虑&#xff0c;常年C盘显示都是红色的。上网一查&#xff0c;发现PS启动时暂存盘的空间是…

最新BurpSuite2024.9专业中英文开箱即用版下载

1、工具介绍 本版本更新介绍 此版本对 Burp Intruder 进行了重大改进&#xff0c;包括自定义 Bambda HTTP 匹配和替换规则以及对扫描 SOAP 端点的支持。我们还进行了其他改进和错误修复。 Burp Intruder 的精简布局我们对 Burp Intruder 进行了重大升级。现在&#xff0c;您可…

原文翻译:Make Skeleton-based Action Recognition Model Smaller, Faster and Better

全网没找到一个完整的翻译&#xff0c;用chatgpt翻译如下&#xff0c;可能有的地方不够准确&#xff0c;推荐结合原文对照着看更。 摘要 尽管基于骨架的动作识别在近年来取得了巨大的成功&#xff0c;但大多数现有方法可能面临模型规模庞大和执行速度缓慢的问题。为了解决这个…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近&#xff0c;到了国庆节&#xff0c;自己呆在学校当守校人&#xff0c;太无聊了&#xff0c;顺便做一个小demo帮祖国目前庆生&#xff01;&#xff01;&#xff01; 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

【MyBatis 源码拆解系列】JVM 级别缓存能力设计:MyBatis 的一、二级缓存如何设计?

欢迎关注公众号 【11来了】 &#xff0c;持续 MyBatis 源码系列内容&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址&#xff1a;点击查看文章导读&#xff01; 感谢你的关注&#xff…

Linux内核对连接的组织和全连接队列

一、Linux内核的组织形式 1.1 描述“连接”的结构 TCP协议的特点是面向连接&#xff0c;一个服务端可能会被多个客户端连接&#xff0c;那这些连接也一定会被操作系统组织起来&#xff0c;接下来我们谈一谈在Linux内核中是如何管理这些连接的。 既然要管理这些连接&#xff0c…

vue3中el-input在form表单按下回车刷新页面

摘要&#xff1a; 在input框中点击回车之后不是调用我写的回车事件&#xff0c;而是刷新页面&#xff01; 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 &#xff0c;并设置style“display:none” <ElInput style"display…

SkyWalking 高可用

生产环境中,后端应用需要支持高吞吐量并且支持高可用来保证服务的稳定,因此需要高可用集群管理。 集群方案 Skywalking集群是将 skywalking oap 作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就可以提供服务。 高可用…