【Vue】TypeScript与Vue3集成
个人主页:Guiat
归属专栏:Vue
文章目录
- 1. 前言
- 2. 环境准备与基础搭建
- 2.1. 安装 Node.js 与 npm/yarn/pnpm
- 2.2. 创建 Vue3 + TypeScript 项目
- 2.2.1. 使用 Vue CLI
- 2.2.2. 使用 Vite(推荐)
- 2.2.3. 目录结构简述
- 3. Vue3 + TS 基础语法整合
- 3.1. Composition API 集成 TypeScript
- 3.1.1. 基础组件写法
- 3.1.2. Props 与类型约束
- 3.1.3. Emits 事件类型声明
- 3.2. Options API 简要对比
- 4. TypeScript 类型系统与 Vue3 深度融合
- 4.1. 基本类型断言
- 4.2. 泛型加强
- 4.2.1. `ref<T>`
- 4.2.2. `defineProps<T>`, `defineEmits<T>`
- 4.3. 类型辅助工具活用
- 4.3.1. 类型导出 reuse
- 4.3.2. 联合类型、类型推断
- 5. 组件开发全流程:TypeScript 全类型实践
- 5.1. 父子组件 Props + Emits 综合举例
- 5.1.1. 子组件定义
- 5.1.2. 父组件使用
- 5.2. 插槽与类型声明
- 6. 全局属性与模块类型扩展
- 6.1. app.config.globalProperties 类型扩展
- 6.1.1. 类型声明
- 6.1.2. 组件中类型无误调用
- 7. TS 下的常用第三方库引入与类型声明
- 7.1. 以 Axios 为例
- 7.1.1. 安装与引入
- 7.1.2. 类型化 Api 封装
- 7.1.3. 组件调用
- 7.2. 第三方库缺失类型声明问题
- 8. Vue Router & Pinia 全类型支持
- 8.1. 路由类型保驾护航
- 8.1.1. 安装
- 8.1.2. 路由元数据类型增强
- 8.1.3. 全局类型合并扩展(如 TS 智能感知 meta)
- 8.2. Pinia 全类型示例
- 8.2.1. 安装
- 8.2.2. 定义类型安全 store
- 8.2.3. 组件类型安全调用
- 9. 综合场景实践
- 9.1. 类型安全的表单组件
- 9.1.1. 定义表单字段类型
- 9.1.2. 组件使用类型安全表单 state
- 9.1.3. 集成第三方表单库(如 vee-validate)
- 10. 典型架构场景图表分析
- 10.1. 项目类型传递/共享关系图
- 10.2. 业务拆包与类型定义分层
- 11. TypeScript + Vue3 最佳实践要点
- 12. 总结
正文
1. 前言
TypeScript 作为现代前端开发的主流静态类型语言,极大增强了代码的规范性和可维护性。Vue3 作为前端主流框架,官方也对 TypeScript 提供了全力支持。TypeScript 与 Vue3 的集成不仅能够提升开发效率,还能显著减少运行时错误,是现代企业项目的首选。
本文将以多级阿拉伯数字标题的方式,系统讲解 TypeScript 与 Vue3 集成的各个方面,涵盖环境搭建、基础语法整合、类型声明、组件开发、全局属性、第三方库引入、常见场景实践以及最佳实践建议。同时,配以典型代码示例和关键结构图表,助力理解。
**注意:**本文不会涉及 Vue3 的响应式原理与数据绑定相关内容,专注于 TypeScript 实战应用。
2. 环境准备与基础搭建
2.1. 安装 Node.js 与 npm/yarn/pnpm
TypeScript 与 Vue3 需借助现代 Node.js 生态环境,推荐使用 LTS 版本。
node -v
npm -v # 或 yarn -v / pnpm -v
2.2. 创建 Vue3 + TypeScript 项目
2.2.1. 使用 Vue CLI
npm install -g @vue/cli
vue create my-vue3-ts-app
# 选择 Vue 3、手动配置特性,勾选 TypeScript
2.2.2. 使用 Vite(推荐)
Vite 是新一代前端构建工具,适用于现代 Vue3 项目。
npm create vite@latest
# 选择 vue + TypeScript 选项
cd my-vue3-ts-app && npm install
2.2.3. 目录结构简述
my-vue3-ts-app/
│
├── src/
│ ├── components/
│ ├── App.vue
│ ├── main.ts
│ └── ...
│
├── tsconfig.json # TypeScript 配置
├── vite.config.ts # 构建工具配置
└── package.json
图表分析:项目结构
3. Vue3 + TS 基础语法整合
Vue3 支持两种主流的组合方式:Options API + TS 和 Composition API + TS。推荐编写业务逻辑时使用 Composition API。
3.1. Composition API 集成 TypeScript
3.1.1. 基础组件写法
src/components/HelloWorld.vue
<script lang="ts" setup>
import { ref } from "vue";const message = ref<string>("Hello TypeScript + Vue3!");
</script><template><div>{{ message }}</div>
</template>
lang="ts"
告诉 Vue 以 TypeScript 解析<script>
setup
语法糖配合 TS 类型推导(ref)
3.1.2. Props 与类型约束
<script lang="ts" setup>
import { defineProps } from 'vue';interface Props {msg: string;count?: number;
}const props = defineProps<Props>();
</script><template><h1>{{ props.msg }}</h1><p v-if="props.count">Count: {{ props.count }}</p>
</template>
3.1.3. Emits 事件类型声明
<script lang="ts" setup>
import { defineEmits } from "vue";const emit = defineEmits<{(event: 'increment', value: number): void
}>();function handleClick() {emit('increment', 1);
}
</script>
3.2. Options API 简要对比
虽然不推荐,新旧项目迁移时经常遇到
<script lang="ts">
import { defineComponent } from 'vue'export default defineComponent({props: {title: String,},methods: {sayHello(msg: string): void {console.log(msg);}}
})
</script>
4. TypeScript 类型系统与 Vue3 深度融合
Vue3 充分利用了 TypeScript 的高级类型。
4.1. 基本类型断言
const name: string = "Alice";
const age: number = 25;
4.2. 泛型加强
如 ref<T>
, defineProps<T>
, defineEmits<T>
, defineExpose<T>
4.2.1. ref<T>
import { ref } from "vue";const user = ref<{name: string, age: number}>({ name: 'Bob', age: 30 });
4.2.2. defineProps<T>
, defineEmits<T>
见前文 3.1.2/3.1.3 示例
4.3. 类型辅助工具活用
代码体验进一步提升:
4.3.1. 类型导出 reuse
types/user.ts
export interface User {id: number;name: string;email: string;
}
组件中使用:
<script lang="ts" setup>
import type { User } from '@/types/user'
const props = defineProps<{ user: User }>();
</script>
4.3.2. 联合类型、类型推断
type Status = 'success' | 'error' | 'loading';const status = ref<Status>('loading');
5. 组件开发全流程:TypeScript 全类型实践
5.1. 父子组件 Props + Emits 综合举例
5.1.1. 子组件定义
src/components/Counter.vue
<script lang="ts" setup>
import { defineProps, defineEmits } from "vue";
interface Props {modelValue: number
}
const props = defineProps<Props>();const emit = defineEmits<{(event: 'update:modelValue', value: number): void
}>();function inc() {emit('update:modelValue', props.modelValue + 1)
}
function dec() {emit('update:modelValue', props.modelValue - 1)
}
</script>
<template><button @click="dec">-</button><span>{{ props.modelValue }}</span><button @click="inc">+</button>
</template>
5.1.2. 父组件使用
<script lang="ts" setup>
import { ref } from 'vue'
import Counter from './components/Counter.vue'const count = ref<number>(0)
</script>
<template><Counter v-model="count"/><p>父组件当前值:{{ count }}</p>
</template>
5.2. 插槽与类型声明
插槽内容可通过 TS 接口声明类型。
<script lang="ts" setup>
interface HeaderSlotProps {title: string
}
defineSlots<{header(props: HeaderSlotProps): void
}>()
</script>
<template><slot name="header" :title="'My Title'"/>
</template>
6. 全局属性与模块类型扩展
6.1. app.config.globalProperties 类型扩展
入口 main.ts
设置全局属性(如 $filters
)
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)
app.config.globalProperties.$filters = {capitalize(str: string) {return str.charAt(0).toUpperCase() + str.slice(1);}
}
app.mount('#app')
6.1.1. 类型声明
新建 src/types/vue.d.ts
import { ComponentCustomProperties } from 'vue'declare module '@vue/runtime-core' {interface ComponentCustomProperties {$filters: {capitalize(str: string): string}}
}
6.1.2. 组件中类型无误调用
<script lang="ts" setup>
const str = $filters.capitalize('hello world')
</script>
7. TS 下的常用第三方库引入与类型声明
7.1. 以 Axios 为例
7.1.1. 安装与引入
npm i axios
npm i -D @types/axios
7.1.2. 类型化 Api 封装
import axios from 'axios'export interface ApiResponse<T> {code: number;data: T;message: string;
}
export function getUser(userId: number) {return axios.get<ApiResponse<User>>(`/api/user/${userId}`);
}
7.1.3. 组件调用
<script lang="ts" setup>
import { ref, onMounted } from 'vue'
import { getUser } from '@/api/user'
import type { User } from '@/types/user'const user = ref<User>()
onMounted(async () => {const res = await getUser(123)if(res.data.code === 0) user.value = res.data.data
})
</script>
7.2. 第三方库缺失类型声明问题
如遇第三方库没有 type,需自己声明。
新建 src/types/some-lib.d.ts
:
declare module 'some-lib' {export function hello(name: string): void;
}
8. Vue Router & Pinia 全类型支持
8.1. 路由类型保驾护航
8.1.1. 安装
npm i vue-router
# Vue3 新版已内置类型
8.1.2. 路由元数据类型增强
定义:
import { RouteRecordRaw } from 'vue-router'
interface Meta {requiresAuth?: boolean;title?: string;
}const routes: RouteRecordRaw[] = [{path: '/',name: 'Home',component: () => import('@/views/Home.vue'),meta: {requiresAuth: true,title: '首页'} as Meta}
]
8.1.3. 全局类型合并扩展(如 TS 智能感知 meta)
src/types/router.d.ts
import 'vue-router'
declare module 'vue-router' {interface RouteMeta {requiresAuth?: boolean;title?: string;}
}
8.2. Pinia 全类型示例
8.2.1. 安装
npm i pinia
8.2.2. 定义类型安全 store
src/stores/counter.ts
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),actions: {increment() {this.count++}}
})
8.2.3. 组件类型安全调用
<script lang="ts" setup>
import { useCounterStore } from '@/stores/counter'const counterStore = useCounterStore()
counterStore.increment()
</script>
Pinia 全面使用泛型,无需额外类型声明即可获得全类型推断。
9. 综合场景实践
对真实业务有指导意义的高阶运用:
9.1. 类型安全的表单组件
9.1.1. 定义表单字段类型
interface FormData{username: string,password: string,remember: boolean
}
9.1.2. 组件使用类型安全表单 state
<script lang="ts" setup>
import { reactive } from 'vue'
const form = reactive<FormData>({username: "",password: "",remember: false,
})
</script>
<template><input v-model="form.username" placeholder="用户名"><input v-model="form.password" type="password" placeholder="密码"><input type="checkbox" v-model="form.remember"> 记住我
</template>
9.1.3. 集成第三方表单库(如 vee-validate)
vee-validate 已内置类型支持,可直接配合类型接口。
10. 典型架构场景图表分析
10.1. 项目类型传递/共享关系图
- 统一类型接口放到
types
,Api 层/组件/Pinia 共享 - 保证全链路的数据安全性
10.2. 业务拆包与类型定义分层
11. TypeScript + Vue3 最佳实践要点
- 统一类型声明管理:将类型接口集中管理于
src/types/
文件夹。 - 避免 any:任何时候都应当追求类型精确约束而不是填充 any。
- 泛型更优雅:
ref<T>
、defineProps<T>
、Api 响应等全部泛型化声明。 - 配置 tsconfig.json:合理配置路径映射和检测规则,提升开发体验。
- 配合 IDE 插件和类型检查工具:如 Volar、ESLint/TSLint、Prettier。
- 定期类型升级和重构:利用类型系统减少技术债。
- 善用类型工具:如
Partial<T>
、Pick<T>
、Record<K,V>
等。 - 组件 slot、emit 等交互全类型声明。
12. 总结
TypeScript 与 Vue3 的深度集成为现代前端开发带来革命性的进步。从环境搭建到项目结构优化,从 Props/Emits/Slots 全链路类型声明,到 Pinia、Router、第三方库的类型增强,TS 均可充分发挥威力,极大地提高了代码的可靠性开发幸福感。
前端开发者应尽早拥抱 TypeScript + Vue3,借助强大的类型系统,让团队开发协作更高效、更健壮。
结语
感谢您的阅读!期待您的一键三连!欢迎指正!
相关文章:
【Vue】TypeScript与Vue3集成
个人主页:Guiat 归属专栏:Vue 文章目录 1. 前言2. 环境准备与基础搭建2.1. 安装 Node.js 与 npm/yarn/pnpm2.2. 创建 Vue3 TypeScript 项目2.2.1. 使用 Vue CLI2.2.2. 使用 Vite(推荐)2.2.3. 目录结构简述 3. Vue3 TS 基础语法整…...
win11中wsl在自定义位置安装ubuntu20.04 + ROS Noetic
wsl的安装 环境自定义位置安装指定ubuntu版本VsCodeROS备份与重载备份重新导入 常用命令参考文章 环境 搜索 启用或关闭 Windows 功能 勾选这2个功能,然后重启 自定义位置安装指定ubuntu版本 从网上找到你所需要的相关wsl ubuntu版本的安装包,一般直…...
【数据可视化-29】食物营养成分数据可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
手动实现legend 与 echarts图交互 通过js事件实现图标某项的高亮 显示与隐藏
通过html实现legend的样式 提供调用echarts的api实现与echarts图表交互的效果 实现饼图element实现类似于legend与echartstu表交互效果 效果图 配置代码 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…...
C语言编程--16.删除链表的倒数第n个节点
题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出:…...
centos7使用certbot完成nginx ssl证书续期
没有废话纯干货 yum源配置(配置好的可以跳过) #到/etc/yum.repos.d/下mkdir bak,将所用东西mv到bak下 cd /etc/yum.repos.d/ mkdir bak mv ./* bak/ wget https://mirrors.aliyun.com/repo/Centos-7.repo 没有安装nginx的话,配…...
ECharts学习之 toolbox 工具栏
toolbox: {show: true,feature: {//数据视图工具,可以展现当前图表所用的数据dataView: {title: "数据视图",readOnly: false, //是否不可编辑,即只读lang:[数据视图,关闭,刷新] //数据视图上有三个话术},magicType: {type: ["line"…...
修改el-select背景颜色
修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式(推荐) */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…...
Qt 使用 MySQL 数据库的基本方法
在 Qt 中,使用 MySQL 数据库的基本方法主要是通过 QSqlDatabase、QSqlQuery 等类来进行数据库的连接、查询和数据操作。以下是 Qt 中连接和操作 MySQL 数据库的基本步骤。 1. 安装 MySQL 驱动 首先,确保您的 Qt 环境已经配置了 MySQL 驱动。通常&#…...
BLIP 系列论文(BLIP、BLIP-2、InstructBLIP)
BLIP BLIP 是 Salesforce 团队在多模态领域中的经典工作,影响力巨大,BLIP 系列包括:BLIP、BLIP-2、InstructBLIP。 BLIP 在多模态大模型之前,多模态领域中最流行的是视觉-语言预训练(Vision-Language Pre-training,…...
【玩转全栈】—— 无敌前端究极动态组件库--Inspira UI
目录 Inspira UI 介绍 配置环境 使用示例 效果: Inspira UI 学习视频: 华丽优雅 | Inspira UI快速上手_哔哩哔哩_bilibili 官网:https://inspira-ui.com/ Inspira UI 介绍 Inspira UI 是一个设计精美、功能丰富的用户界面库,专为…...
Java24新增特性
Java 24(Oracle JDK 24)作为Java生态的重要更新,聚焦AI开发支持、后量子安全、性能优化及开发者效率提升,带来20余项新特性和数千项改进。以下是核心特性的分类解析: 一、语言特性增强:简化代码与模式匹配 …...
Git多人协作与企业级开发模型
目录 1.多人协作一 2.多人协作二 3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法 4.企业级开发模型 4.1.Git的重要性 4.2.系统开发环境 4.3.Git 分⽀设计规范 1.多人协作一 ⽬前,我们所完成的⼯作如下: 基本完成Git的所有本…...
Android学习总结之扩展基础篇(一)
一、IdleHandler工作原理 1. IdleHandler 接口定义 IdleHandler 是 MessageQueue 类中的一个接口,定义如下: public static interface IdleHandler {/*** 当消息队列空闲时会调用此方法。* return 如果返回 true,则该 IdleHandler 会保留在…...
C语言教程(十六): C 语言字符串详解
一、字符串的表示 在C语言中,字符串是由一系列字符组成,并且以空字符 \0 作为结束标志。字符串通常用字符数组来表示。例如: char str[] {H, e, l, l, o, \0};也可以使用字符串字面量来初始化字符数组:char str[] "Hello&…...
Redis LFU 策略参数配置指南
一、基础配置步骤 设置内存上限 在 redis.conf 配置文件中添加以下指令,限制 Redis 最大内存使用量(例如设置为 4GB): maxmemory 4gb选择 LFU 淘汰策略 根据键的作用域选择策略: # 所有键参与淘汰 maxmemory-…...
Pikachu靶场-unsafe upfileupload
不安全的文件上传漏洞防御与对抗方式对照表 防御方式 防御实现 攻击者对抗方式 对抗原理 文件类型白名单验证 仅允许指定扩展名(如 .jpg, .png) if (!in_array($ext, [jpg, png])) { die(); } 伪造文件类型: 1. 修改文件头(…...
Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型
目录 查看数据类型type() 使用type()语句查看数据的类型 变量无类型而数据有类型 数据类型转换 在字符串,整型,浮点数之间相互转换 可变类型和不可变类型 查看数据类型type() 使用type()语句查看数据的类型 Python中使用type(被查看数据的类型)语…...
高防IP是如何防护DDoS攻击和CC攻击的
高防IP是一种针对网络攻击(如DDoS和CC攻击)设计的防护服务,其核心原理是通过流量调度、智能清洗和分布式防护节点等技术,将恶意流量拦截在目标服务器之外。以下是其防护DDoS和CC攻击的具体机制: 一、防御DDoS攻击的机制…...
从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关
在构建本地或云端搜索引擎系统时,EasySearch 凭借其轻量、高性能、易部署等优势,逐渐成为众多开发者和技术爱好者的首选。但在实际部署过程中,如何借助 Nginx 为 EasySearch 提供高效、稳定且安全的访问入口,尤其是在身份认证方面…...
利用deepseek快速生成甘特图
一、什么是甘特图 甘特图(Gantt Chart)是一种直观的项目管理工具,广泛应用于多个领域,主要用于时间规划、任务分配和进度跟踪。 直观性:时间轴清晰展示任务重叠或延迟。 灵活性:支持…...
突破厚铜PCB阻抗控制难题:多级阻抗实现方法
随着电子技术的发展,电子设备对电路板的性能要求越来越高。其中,阻抗控制是电路板设计中的一个重要环节,尤其是对于高频、高速的电子设备。厚铜电路板由于其优良的导电性能和机械强度,被广泛应用于各种高端电子设备中。然而&#…...
JCP官方定义的Java技术体系组成部分详解
JCP官方定义的Java技术体系组成部分详解 1. Java平台规范(Java Platform Specifications) 定义:由JCP制定的Java平台核心规范,包括Java SE(标准版)、Java EE(企业版,现为Jakarta EE…...
如何在 Windows上安装 Python 3.6.5?
Windows 系统安装步骤 下载安装包 安装包下载链接:https://pan.quark.cn/s/9294ca0fd46a 运行安装程序 双击下载的 .exe 文件(如 python-3.6.5.exe)。 勾选 Add Python 3.6 to PATH(重要!这将自动配置环境变量&…...
OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
hdc(OpenHarmony Device Connector)是为开发人员提供的用于设备连接调试的命令行工具,该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备(或模拟器)进行连接调试通信。简单来讲,hdc 是 Op…...
【C语言】C语言动态内存管理
前言 在C语言编程中,内存管理一直是程序员需要重点关注的领域。动态内存管理更是如此,它不仅涉及到内存的灵活分配和释放,还隐藏着许多潜在的陷阱。本文将从动态内存分配的基础讲起,逐步深入到常见的错误、经典笔试题分析&#x…...
Java 运算符:深度解析
前言 作为Java开发者,运算符是我们每天都会接触的基础元素。然而,很多开发者对运算符的理解仅停留在表面层次。本文将全面深入地剖析Java中的各类运算符,揭示其底层原理、使用技巧和最佳实践,帮助您成为真正的Java运算符专家。 …...
健康养生小窍门
健康养生是我们对美好生活的追求,掌握一些实用的小窍门,能让我们轻松拥抱健康。 在生活起居方面,要注重环境的营造。卧室的窗帘选择遮光性好的材质,保证睡眠时的黑暗环境,有助于提高睡眠质量。在室内放置一些绿植&…...
4月24号
网络编程: //IP的对象一台电脑的对象 InetAddress address InetAddress.getByName("DESKTOP-5OJJSAM"); System.out.println(address); String name address.getHostName(); System.out.println(name);//DESKTOP-5OJJSAM String ip address.getHostAddress(); Sys…...
【RocketMq源码篇-01】环境搭建、基本使用、可视化界面
RocketMq源码核心篇整体栏目 内容链接地址【一】环境搭建、基本使用、可视化界面https://zhenghuisheng.blog.csdn.net/article/details/147481401 环境搭建、基本使用、可视化界面 一,RocketMq源码分析1. docker安装rocketMq2. rocketMq基本使用2.1,创建…...
Mysql的深度分页查询优化
一、深度分页为什么慢? 当执行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 时: MySQL 会扫描前 1,000,010 行,丢弃前 100 万行,仅返回 10 行。偏移量(offset)越大,扫描行数越多&…...
OpenCv高阶(十一)——物体跟踪
文章目录 前言一、OpenCV 中的物体跟踪算法1、均值漂移(Mean Shift):2、CamShift:3、KCF(Kernelized Correlation Filters):4、MIL(Multiple Instance Learning)…...
第一章:Model Context Protocol (MCP)
Chapter 1: Model Context Protocol (MCP) 🌟 为什么需要MCP? 想象你正在训练一只小狗,希望它能听懂你的指令并执行任务。但如果你和小狗用不同语言交流,它可能完全不知道你的意思。类似地,大型语言模型(L…...
【SAP PP】COOIS报表分析
本文目录 一、基本查询操作 二、订单参数文件 三、COOIS报表增强BADI COOIS报表是PP模块核心报表,是系统中一个功能强大的标准报表,COOIS可查询查询生产订单的状态、进度、组件、工序、报工等信息的综合型报表,,关联了生产订单…...
2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888
4月24日,在第二十一届上海国际汽车工业展览会(以下简称“上海车展”)期间,紫光展锐重磅推出新一代旗舰级智能座舱芯片平台A8880,以强劲实力全面助力汽车座舱智能化迈向新征程。 三大核心能力,紧抓市场机遇 …...
蓝牙4.0与蓝牙5.0的区别
蓝牙4.0与蓝牙5.0的主要区别: 传输速度:蓝牙5.0的传输速度是蓝牙4.0的两倍,理论速率可达2Mbps,而蓝牙4.0为1Mbps。 传输距离:蓝牙5.0的传输距离是蓝牙4.0的四倍,在开放空间可达300米,而蓝牙4.0…...
Vue 的单文件组件(.vue 文件)script 标签的使用说明
在 Vue 的单文件组件(.vue 文件)中,最多可以编写 2 个 <script> 标签,但需要满足特定条件: 1. Vue 3 的情况(主流用法) 从 Vue 3.2 开始,官方支持以下两种形式共存࿱…...
TIM输入捕获知识部分
越往左,频率越高;越往右,频率越低。【越紧凑,相同时间,次数越多】 计算频率的方法:测评法、测周法、中界频率。 频率的定义:1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…...
【数据可视化-30】Netflix电影和电视节目数据集可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
多线程事务?拿捏!
场景:有一批1万或者10万数据,插入数据库,怎么做 事务中进行批量提交 publList<List<OrderPo>> partition Lists.partition(list, 450);StopWatch stopWatch new StopWatch();stopWatch.start();// 顺序插入for (List<OrderPo> sub…...
Spring Boot 自动配置深度解析:从源码结构到设计哲学
Spring Boot 自动配置深度解析:从源码结构到设计哲学 为什么自动配置如此重要? 在传统 Spring 开发中,开发者要手动配置大量 XML 或 JavaConfig,过程繁琐、重复且容易出错。Spring Boot 引入自动配置机制,极大地简化…...
Linux下载与安装——笔记
Linux 是一种自由和开放源代码的 操作系统(OS),其核心(Kernel)由 Linus Torvalds 于 1991 年首次发布。 1、选择适合的 Linux 发行版 根据使用场景和技术水平选择: 新手入门:Ubuntu(…...
09前端项目----分页功能
分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多,所以采用分页功能实现分页功能 Element UI已经有封装好的组件,但是也要掌握原理,以及自定…...
头歌之动手学人工智能-机器学习 --- PCA
目录 第1关:维数灾难与降维 第2关:PCA算法流程 任务描述 编程要求 测试说明 第3关:sklearn中的PCA 任务描述 编程要求 测试说明 第1关:维数灾难与降维 第2关:PCA算法流程 任务描述 本关任务:补充…...
Spring 中的循环引用问题
本章来聊聊Spring 中的循环引用问题该如何解决。这里聊的很粗糙,并没有那么细节,只是大概了解了一点。 什么是循环引用? 如下图所示: 图中有两个类,一个 Class A ,A 中又引用了 B,Class B 中又…...
SIGGRAPH投稿相关官方指导
author instruction https://www.siggraph.org/preparing-your-content/author-instructions/ 使用latex模板 https://research.siggraph.org/blog/guides/how-to-use-the-acm-siggraph-tog-latex-template/ 格式要求(字体、页面大小等) https://sa202…...
Python学习笔记(三)(程序流程控制)
文章目录 一、条件语句(if/elif/else)语法:示例: 二、循环语句1. for 循环语法:示例: 2. while 循环语法:示例: 三、循环控制语句1. break:立即终止循环2. continue&…...
onnx注册cpu版flashattention
摘要 本教程展示了如何在 ONNX Runtime 中注册一个 CPU 可执行的 FlashAttention 算子。首先,可以直接升级到 ONNX Runtime v1.16 及以上,以获得内置的 FlashAttention CPU 实现citeturn0search2;其次,演示了如何通过 ONNX Runtime 的 Custom Op 接口自定义实现并注…...
WebAssembly:开启高性能Web应用新时代
一、引言 随着互联网技术的飞速发展,Web应用的复杂度和性能要求越来越高。传统的Web开发技术,如JavaScript,虽然功能强大,但在处理复杂计算和高性能需求时仍存在一些局限性。WebAssembly(简称Wasm)作为一种…...
【前端】手写代码输出题易错点汇总
不定期补充。 目录 异步事件循环this作用域/变量提升/闭包原型/继承 异步事件循环 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); //1 //2 //4promise.then 是微任务&…...