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.rhkb.cn/news/438522.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于深度学习torch的环境配置问题

已经下好了torch在虚拟环境中&#xff0c;结果在ipynb文件中无法运行 后来在终端直接用python语句编译 发现没有问题 在编辑测试py文件 发现runcode有问题 原来是插件默认base环境 具体操作参考VS Code插件Code Runner使用python虚拟环境_coderunner怎么在虚拟环境中使用-CSD…

11. 异步编程

计算机的核心部分&#xff0c;即执行构成我们程序的各个步骤的部分&#xff0c;称为处理器。我们迄今为止看到的程序都会让处理器忙个不停&#xff0c;直到它们完成工作。像操作数字的循环这样的程序的执行速度几乎完全取决于计算机处理器和内存的速度。但是&#xff0c;许多程…

微服务nginx解析部署使用全流程

目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx​编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…

Windows上面搭建Flutter Android运行环境

Windows 上面搭建 Flutter Android 运 行环境&#xff08;适用于 Flutter3.7.3之后的版本&#xff09;。 提示&#xff1a; Flutter3.7.x 之前的版本配置请参考教程&#xff0c;或者参考文档《 Flutter Android 开发环境搭建&#xff0c;适用于 Flutter3.3.10之前的版本》。 …

MySQL-SQL(DDL、DML、DQL、DCL)

一、 MySQL启动&#xff1a; MySQL客户端连接&#xff1a; 二、SQL &#xff11;.SQL通用语法 (1) SQL语句可以单行或多行书写&#xff0c;以分号结尾。 (2) SQL语句可以使用空格/缩进来增强语句的可读性。 (3) MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使…

宣城自闭症咨询寄宿学校:为家庭提供专业支持

宣城与广州的自闭症教育探索&#xff1a;星贝育园为家庭提供专业支持 在自闭症儿童教育的广阔领域中&#xff0c;寄宿学校作为一种特殊而重要的教育模式&#xff0c;正逐渐展现出其独特的价值和意义。虽然本文标题提及了宣城的自闭症咨询寄宿学校&#xff0c;但我们的焦点将转…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图&#xff1a; 分析&#xff1a;在物体面上生成粒子&#xff0c;改变粒子的不透明度&#xff0c;让粒子收到力&#xff0c;并添加紊乱&#xff0c;类似于水蒸气。 操作步骤&#xff1a; 1、创建个niagara 系统&#xff0c;使用模版 simple sprite burst。简单调节参数。…

【算法】链表:160.相交链表(easy)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法&#xff08;双指针&#xff09; 返回结果 算法正确性 时间复杂度 4、代码 1、题目链接 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 ​ 3、解法&#xff08;…

[C#]C# winform部署yolov11目标检测的onnx模型

yolov11官方框架&#xff1a;https://github.com/ultralytics/ultralytics 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.2 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel;…

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能&#xff1f; (baidu.com) 1 联接手机…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示&#xff1b; 2、不管是正确的输入&#xff0c;还是错误的输入&#xff0c;都只显示两种情况&#xff0c;true or false&#xff1b; 3、在正确的输入下&#xff0c;输入and 1 1/and 1 2发现可以判断&#xff1b; 布尔盲注常用函数&…

【论文笔记】Visual Instruction Tuning

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Visual Instruction Tunin…

关于 JVM 个人 NOTE

目录 1、JVM 的体系结构 2、双亲委派机制 3、堆内存调优 4、关于GC垃圾回收机制 4.1 GC中的复制算法 4.2 GC中的标记清除算法 1、JVM 的体系结构 "堆"中存在垃圾而"栈"中不存在垃圾的原因: 堆(Heap) 用途:堆主要用于存储对象实例和数组。在Java中…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离 一、微服务雪崩及解决方法 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个…

关于CSS 案例_新闻内容展示

新闻要求 标题:居中加粗发布日期: 右对齐分割线: 提示, 可以使用 hr 标签正文/段落: 左侧缩进插图: 居中显示 展示效果 审核过不了&#xff0c;内容没填大家将就着看吧。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

安卓13设置删除网络和互联网选项 android13隐藏设置删除网络和互联网选项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有些客户不想让用户修改默认的网络配置,禁止用户进入里面调整网络相关的配置。 2.问题分析 像这个问题,我们有好几种方法去处理,这种需求一般…

【Nacos架构 原理】内核设计之Nacos一致性协议

文章目录 Nacos一致性协议为什么需要一致性协议Nacos选择了Raft&#xff08;强一致性&#xff09;&Distro&#xff08;最终一致性&#xff09;服务发现角度配置管理角度 Nacos自研Distro协议背景设计思想数据初始化数据校验写操作读操作 Nacos一致性协议 为什么需要一致性…

LabVIEW 成绩统计系统

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

vgg19提取特征

一般来说&#xff0c;大家使用VGG16&#xff0c;用的是第四列的网络架构&#xff0c;而使用VGG19&#xff0c;使用的就是第六列的网络架构。 使用vgg进行提取特征&#xff0c;在这个项目中&#xff0c;使用的就是每一块卷积层的第一层。 import torch.nn as nn from torchvis…