当前位置: 首页 > news >正文

TypeScript 从入门到精通:完整教程与实战应用(一)

1. TypeScript 简介

什么是 TypeScript?
TypeScript 是 JavaScript 的超集,添加了静态类型系统,由微软开发并开源。它编译成纯 JavaScript 运行在任何 JavaScript 环境中。

为什么使用 TypeScript?

  • 类型安全:在编译时捕获错误

  • 更好的开发体验:智能提示和代码补全

  • 更容易维护:清晰的代码结构和接口定义

  • 渐进式采用:可以逐步将 JS 项目迁移到 TS

2. 环境搭建

安装:

npm install -g typescript

验证安装: 

tsc --version

初始化项目: 

mkdir ts-project
cd ts-project
npm init -y
tsc --init

3. 基础类型

TypeScript 提供了多种基本类型: 

// 布尔值
let isDone: boolean = false;// 数字
let decimal: number = 6;
let hex: number = 0xf00d;// 字符串
let color: string = "blue";// 数组
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3]; // 泛型语法// 元组
let tuple: [string, number] = ["hello", 10];// 枚举
enum Color {Red, Green, Blue}
let c: Color = Color.Green;// Any
let notSure: any = 4;
notSure = "maybe a string instead";// Void
function warnUser(): void {console.log("This is a warning message");
}// Null 和 Undefined
let u: undefined = undefined;
let n: null = null;// Never
function error(message: string): never {throw new Error(message);
}// 类型断言
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

4. 接口 (Interfaces)

接口是 TypeScript 的核心概念之一:

interface Person {firstName: string;lastName: string;age?: number; // 可选属性readonly id: number; // 只读属性[propName: string]: any; // 任意属性
}function greet(person: Person) {return `Hello, ${person.firstName} ${person.lastName}`;
}let user = { firstName: "Jane", lastName: "User", id: 12345 };
console.log(greet(user));

5. 类 (Classes)

TypeScript 提供了完整的类实现:

class Animal {private name: string;constructor(name: string) {this.name = name;}move(distance: number = 0) {console.log(`${this.name} moved ${distance}m.`);}
}class Snake extends Animal {constructor(name: string) {super(name);}move(distance: number = 5) {console.log("Slithering...");super.move(distance);}
}let sam = new Snake("Sammy");
sam.move();

第二部分:TypeScript 进阶 (30-70%)

6. 泛型 (Generics)

泛型提供了代码复用的强大方式:

function identity<T>(arg: T): T {return arg;
}let output = identity<string>("myString");
let output2 = identity("myString"); // 类型推断// 泛型接口
interface GenericIdentityFn<T> {(arg: T): T;
}let myIdentity: GenericIdentityFn<number> = identity;// 泛型类
class GenericNumber<T> {zeroValue: T;add: (x: T, y: T) => T;
}let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = (x, y) => x + y;

7. 高级类型

联合类型:

let padding: string | number;

类型别名:

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;

字符串字面量类型:

type Easing = "ease-in" | "ease-out" | "ease-in-out";

可辨识联合:

interface Square {kind: "square";size: number;
}interface Rectangle {kind: "rectangle";width: number;height: number;
}type Shape = Square | Rectangle;function area(s: Shape) {switch (s.kind) {case "square": return s.size * s.size;case "rectangle": return s.height * s.width;}
}

8. 模块和命名空间

模块:

// math.ts
export function add(x: number, y: number): number {return x + y;
}// app.ts
import { add } from './math';
console.log(add(1, 2));

命名空间:

namespace Validation {export interface StringValidator {isAcceptable(s: string): boolean;}const lettersRegexp = /^[A-Za-z]+$/;export class LettersOnlyValidator implements StringValidator {isAcceptable(s: string) {return lettersRegexp.test(s);}}
}let validators: { [s: string]: Validation.StringValidator } = {};
validators["Letters only"] = new Validation.LettersOnlyValidator();

9. 装饰器 (Decorators)

装饰器是一种特殊类型的声明:

function sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
}@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}greet() {return "Hello, " + this.greeting;}
}

第三部分:TypeScript 实战 (70-100%)

10. 与前端框架集成

React + TypeScript:

import React, { useState } from 'react';interface Props {name: string;age?: number;
}const Greeting: React.FC<Props> = ({ name, age = 18 }) => {const [count, setCount] = useState<number>(0);return (<div><h1>Hello {name}, age {age}</h1><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
};export default Greeting;

Vue + TypeScript:

<template><div><h1>Hello {{ name }}, age {{ age }}</h1><p>You clicked {{ count }} times</p><button @click="increment">Click me</button></div>
</template><script lang="ts">
import { defineComponent, ref } from 'vue';export default defineComponent({props: {name: {type: String,required: true},age: {type: Number,default: 18}},setup(props) {const count = ref(0);function increment() {count.value++;}return {count,increment};}
});
</script>

11. Node.js 后端开发

Express + TypeScript:

import express, { Request, Response } from 'express';interface User {id: number;name: string;
}const app = express();
app.use(express.json());const users: User[] = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' }
];app.get('/users', (req: Request, res: Response<User[]>) => {res.json(users);
});app.post('/users', (req: Request<{}, {}, User>, res: Response<User>) => {const newUser = req.body;users.push(newUser);res.status(201).json(newUser);
});const PORT = 3000;
app.listen(PORT, () => {console.log(`Server running on http://localhost:${PORT}`);
});

12. 测试与调试

Jest + TypeScript:

// math.test.ts
import { add, subtract } from './math';describe('math functions', () => {it('should add two numbers', () => {expect(add(1, 2)).toBe(3);});it('should subtract two numbers', () => {expect(subtract(5, 3)).toBe(2);});
});// math.ts
export function add(a: number, b: number): number {return a + b;
}export function subtract(a: number, b: number): number {return a - b;
}

13. 高级配置与优化

tsconfig.json 详解:

{"compilerOptions": {"target": "es6", // 编译目标版本"module": "commonjs", // 模块系统"strict": true, // 启用所有严格类型检查选项"esModuleInterop": true, // 兼容 CommonJS 和 ES Modules"skipLibCheck": true, // 跳过声明文件的类型检查"forceConsistentCasingInFileNames": true, // 强制文件名大小写一致"outDir": "./dist", // 输出目录"rootDir": "./src", // 源文件目录"baseUrl": ".", // 解析非相对模块的基础目录"paths": { // 路径映射"@/*": ["src/*"]},"declaration": true, // 生成 .d.ts 声明文件"sourceMap": true // 生成 source map},"include": ["src/**/*"],"exclude": ["node_modules", "**/*.spec.ts"]
}

14. 性能优化与最佳实践

  1. 使用 const 断言:

    const colors = ["red", "green", "blue"] as const;
  2. 避免 any 类型:

    // 不好
    function logValue(val: any) {console.log(val);
    }// 好
    function logValue<T>(val: T) {console.log(val);
    }
  3. 使用类型守卫:

    function isString(test: any): test is string {return typeof test === "string";
    }
  4. 合理使用 unknown 类型:

    function safeParse(json: string): unknown {return JSON.parse(json);
    }
  5. 使用实用类型:

    interface User {id: number;name: string;age: number;
    }type PartialUser = Partial<User>; // 所有属性可选
    type ReadonlyUser = Readonly<User>; // 所有属性只读
    type UserWithoutAge = Omit<User, 'age'>; // 排除 age 属性

第四部分:项目实战

15. 完整项目:Todo 应用

项目结构:

todo-app/
├── src/
│   ├── components/
│   │   ├── TodoItem.tsx
│   │   └── TodoList.tsx
│   ├── models/
│   │   └── todo.ts
│   ├── App.tsx
│   └── index.tsx
├── public/
├── tsconfig.json
└── package.json

 核心代码:

// models/todo.ts
export interface Todo {id: number;text: string;completed: boolean;
}export type TodoFilter = 'all' | 'active' | 'completed';
// components/TodoItem.tsx
import React from 'react';interface Props {todo: Todo;onToggle: (id: number) => void;onDelete: (id: number) => void;
}const TodoItem: React.FC<Props> = ({ todo, onToggle, onDelete }) => {return (<div><inputtype="checkbox"checked={todo.completed}onChange={() => onToggle(todo.id)}/><span style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>{todo.text}</span><button onClick={() => onDelete(todo.id)}>Delete</button></div>);
};export default TodoItem;
// components/TodoList.tsx
import React, { useState } from 'react';
import TodoItem from './TodoItem';
import { Todo, TodoFilter } from '../models/todo';interface Props {todos: Todo[];onToggle: (id: number) => void;onDelete: (id: number) => void;
}const TodoList: React.FC<Props> = ({ todos, onToggle, onDelete }) => {const [filter, setFilter] = useState<TodoFilter>('all');const filteredTodos = todos.filter(todo => {if (filter === 'active') return !todo.completed;if (filter === 'completed') return todo.completed;return true;});return (<div><div><button onClick={() => setFilter('all')}>All</button><button onClick={() => setFilter('active')}>Active</button><button onClick={() => setFilter('completed')}>Completed</button></div>{filteredTodos.map(todo => (<TodoItemkey={todo.id}todo={todo}onToggle={onToggle}onDelete={onDelete}/>))}</div>);
};export default TodoList;
// App.tsx
import React, { useState } from 'react';
import TodoList from './components/TodoList';
import { Todo } from './models/todo';const App: React.FC = () => {const [todos, setTodos] = useState<Todo[]>([]);const [input, setInput] = useState('');const addTodo = () => {if (!input.trim()) return;const newTodo: Todo = {id: Date.now(),text: input,completed: false};setTodos([...todos, newTodo]);setInput('');};const toggleTodo = (id: number) => {setTodos(todos.map(todo =>todo.id === id ? { ...todo, completed: !todo.completed } : todo));};const deleteTodo = (id: number) => {setTodos(todos.filter(todo => todo.id !== id));};return (<div><h1>Todo App</h1><div><inputtype="text"value={input}onChange={e => setInput(e.target.value)}onKeyPress={e => e.key === 'Enter' && addTodo()}/><button onClick={addTodo}>Add</button></div><TodoListtodos={todos}onToggle={toggleTodo}onDelete={deleteTodo}/></div>);
};export default App;

相关文章:

TypeScript 从入门到精通:完整教程与实战应用(一)

1. TypeScript 简介 什么是 TypeScript&#xff1f; TypeScript 是 JavaScript 的超集&#xff0c;添加了静态类型系统&#xff0c;由微软开发并开源。它编译成纯 JavaScript 运行在任何 JavaScript 环境中。 为什么使用 TypeScript&#xff1f; 类型安全&#xff1a;在编译时…...

什么是Python单例模式

什么是Python单例模式 Python单例模式是一种创建型设计模式,目的是确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。以下从作用和示例进行介绍: 作用 控制资源使用:避免对系统资源的重复消耗,像数据库连接、文件句柄等稀缺资源,只创建一个实例来管理使用,防…...

PHP8.2.9NTS版本使用composer报错,扩展找不到的问题处理

使用composer install时报错&#xff1a; The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at y our own risk, by setting the ‘disable-tls’ option to true.…...

memcache使用

Memcache 是一款高性能的分布式内存对象缓存系统&#xff0c;以下是其使用方法&#xff1a; 安装与配置 • 安装 Memcached &#xff1a;在 CentOS 7 系统中&#xff0c;可使用命令sudo yum install memcached进行安装&#xff0c;也可从源码编译安装&#xff0c;如下载 memca…...

旅游资源网站登录(jsp+ssm+mysql5.x)

旅游资源网站登录(jspssmmysql5.x) 旅游资源网站是一个为旅游爱好者提供全面服务的平台。网站登录界面简洁明了&#xff0c;用户可以选择以管理员或普通用户身份登录。成功登录后&#xff0c;用户可以访问个人中心&#xff0c;进行修改密码和个人信息管理。用户管理模块允许管…...

Nacos 中使用了哪些缓存?缓存的目的是什么?是如何实现的?

Nacos 在服务端和客户端都广泛的使用了缓存机制&#xff0c;下面着重介绍一下。 一、 Nacos 服务端缓存 (Server-Side Caching) Nacos 服务端缓存的主要目的是提高读取性能、降低对底层存储&#xff08;数据库或磁盘文件&#xff09;的压力&#xff0c;并加速对客户端请求的响…...

「GitHub热榜」AIGC系统源码:AI问答+绘画+PPT+音乐生成一站式

—零门槛搭建私有化AI内容工厂&#xff0c;源码开放商业落地指南 为什么全栈AIGC系统成为企业刚需&#xff1f; 1. 传统方案的致命缺陷 痛点 使用ChatGPTMidjourneyCanva 本全栈方案 工具割裂 需切换5平台 一个系统全搞定 成本 年费50万 一次部署永久免费 数据安全 …...

Dify LLM大模型参数(一)

深入了解大语言模型&#xff08;LLM&#xff09;的参数设置 模型的参数对模型的输出效果有着至关重要的影响。不同的模型会拥有不同的参数&#xff0c;而这些参数的设置将直接影响模型的生成结果。以下是 DeepSeek 模型参数的详细介绍&#xff1a; 温度&#xff08;Tempera…...

快速使用工具Cursor

Cursor 是一款面向开发者的集成开发环境&#xff0c;用途如下&#xff1a; 代码编写&#xff1a;支持多语言&#xff0c;有语法高亮、智能补全与格式化功能。代码生成&#xff1a;能依据自然语言描述生成代码。协作开发&#xff1a;支持多人实时协作编辑项目。调试程序&#x…...

JVM之经典垃圾回收器

一、垃圾回收算法 1. 标记-清除&#xff08;Mark-Sweep&#xff09; 步骤&#xff1a; 标记&#xff1a;遍历对象图&#xff0c;标记所有存活对象。清除&#xff1a;回收未被标记的垃圾对象。 特点&#xff1a;简单&#xff0c;但会产生内存碎片。 2. 标记-复制&#xff08;…...

【“星瑞” O6 评测】—NPU 部署 face parser 模型

前言 瑞莎星睿 O6 (Radxa Orion O6) 拥有高达 28.8TOPs NPU (Neural Processing Unit) 算力&#xff0c;支持 INT4 / INT8 / INT16 / FP16 / BF16 和 TF32 类型的加速。这里通过通过官方的工具链进行FaceParsingBiSeNet的部署 1. FaceParsingBiSeNet onnx 推理 首先从百度网盘…...

hadoop的三大结构及其各自的作用

Hadoop 主要有三大核心组件&#xff0c;分别是 HDFS&#xff08;Hadoop Distributed File System&#xff09;、MapReduce 和 YARN&#xff0c;以下是它们各自的作用&#xff1a; HDFS&#xff08;Hadoop Distributed File System&#xff09; 存储数据&#xff1a;HDFS 是一个…...

免费将静态网站部署到服务器方法(仅支持HTML,CSS,JS)

原视频链接&#xff1a;把HTML免费部署到网站上&#xff0c;实现别人也能访问的教程来啦QAQ_哔哩哔哩_bilibili 注意&#xff1a;仅支持HTML、CSS、JS。不支持Vue等框架。 1.打开网站www.wordpress.org 点击红框按钮 点击红框按钮下载wordpress模板文件并解压。 将自己编写的…...

2、SpringAI接入ChatGPT与微服务整合

2、SpringAI接入ChatGPT与微服务整合 小薛博客AI 大模型资料 1、SpringAI简介 https://spring.io/projects/spring-ai Spring AI是一个人工智能工程的应用框架。其目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于人工智能领域&#…...

6.7.图的深度优先遍历(英文缩写DFS)

树是特殊的图&#xff0c;没有回路的图就是树 BFS与DFS的区别在于&#xff0c;BFS使用了队列&#xff0c;DFS使用了栈 一.深度优先遍历&#xff1a; 1.树的深度优先遍历&#xff1a; 树的深度优先遍历分为先根遍历和后根遍历。 以树的先根遍历为例&#xff1a; 上述图片里…...

若依同步企业微信架构及ACTIVITI

企业微信配置 1.进入企业微信后台管理应用管理&#xff0c;新建应用 2.配置网页授权及JS-SDK 将验证文件下载到项目的pubilc下 启动项目 npm run dev 然后验证域名归属 3.配置企业可信IP 公网IP地址即可&#xff0c;仅此IP的服务可调用企业微信接口信息 4.构造域名回调域&a…...

PyTorch分布式训练调试方法(跟踪调用过程)

PyTorch分布式训练调试方法(跟踪调用过程) 背景 在分布式深度学习训练场景中,通信操作(如AllReduce、Send/Recv)和CUDA操作的时序问题往往难以调试。本工具通过以下方式提供调试支持: 拦截所有PyTorch张量操作并记录调用栈监控分布式通信操作的完整生命周期自动生成带时间…...

跟我学C++中级篇——内存异常的分析

一、内存问题引发的现象 在实际使用电脑过程中&#xff0c;经常会遇到电脑卡住了&#xff0c;鼠标和键盘也没反应。这时候儿会怎么办&#xff1f;其实此时打开任务管理器&#xff0c;就可以发现&#xff0c;有几种情况&#xff1a;一是CPU占用过高&#xff1b;二是IO占用过高&…...

HTML新标签与核心 API 实战

HTML5 新标签与核心 API 实战 引言 今天咱们来看看HTML5 新标签以及一些核心 API。 HTML5 的引入彻底改变了 Web 前端开发格局&#xff0c;尤其是其新增的多媒体和交互能力标签。对于前端开发者而言&#xff0c;理解并掌握 <video>、<audio>、<canvas> 和…...

vscode 红色波浪线问题

VSCode 红色波浪线问题终极解决方案 问题描述 在编写 C 项目时&#xff0c;CMake 编译通过但代码出现红色波浪线&#xff0c;常见问题&#xff1a; #include 提示找不到头文件枚举或类型名未定义成员函数或变量无法识别 这些是 VSCode 的 IntelliSense 配置问题&#xff0c…...

类型补充,scan 和数据库管理命令

Redis 数据类型 stream stream 就是一个队列&#xff08;阻塞队列&#xff09; Redis 作为一个消息队列的重要支撑&#xff0c;属于是 list 中 blpop 和 brpop 的升级版本 geospatial 主要用于存储地理位置信息&#xff0c;并对存储的信息进行操作 存储一些点后&#xff0c…...

AI Agent系列(十) -Data Agent(数据分析智能体)开源资源汇总

AI Agent系列【十】 前言一、 Open Interpreter1.1 Open Interpreter的特点1.2 Open Interpreter的优势1.3 Open Interpreter的应用场景 二、DB-GPT2.1 核心能力2.2关键特性:2.3 系统架构 三、DeepBI3.1 特点 前言 DataAgent的能力本质上比较依赖大模型的自然语言转API/SQL/代…...

Vue3 + TypeScript中provide和inject的用法示例

基础写法&#xff08;类型安全&#xff09; typescript // parent.component.vue import { provide, ref } from vue import type { InjectionKey } from vue// 1. 定义类型化的 InjectionKey const COUNTER_KEY Symbol() as InjectionKey<number> const USER_KEY Sy…...

【国家能源集团生态协作平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

不确定与非单调推理的基本概念

前文我们讨论了建立在经典逻辑基础上的确定性推理,这是一种运用确定性知识进行的精确推理。同时,它又是一种单调性推理,即随着新知识的加人,推出的结论或证明了的命题将单调地增加。但是,人们通常是在信息不完善、不精确的情况下运用不确定性知识进行思维、求解问题的,推…...

系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)高效记忆要点、知识体系、考点详解、、练习题并提供答案与解析

计算机组成与体系结构高效记忆要点 从CPU、存储系统、I/O系统三大模块展开&#xff0c;结合高频考点与记忆技巧&#xff0c;有助于系统化掌握核心知识点。 一、CPU结构与工作原理 1. CPU的组成 核心组件&#xff1a; 运算器&#xff08;ALU&#xff09; &#xff1a;负责算术…...

FreeSWITCH中SIP网关(Gateway)操作

freeswitch是一款简单好用的VOIP开源软交换平台。 以下是一篇关于FreeSWITCH中SIP网关&#xff08;Gateway&#xff09;操作的技术指南&#xff0c;基于提供的官方文档内容整理&#xff1a; 一、网关生命周期管理 1. 创建新SIP Profile并启动 FreeSWITCH支持多SIP Profile&…...

构建自动翻译工作流:技术与实践

一、引言 制药行业客户迫切需要一种翻译解决方案&#xff0c;以解决公司内部多样化的翻译难题。他们需要的不仅是提升翻译效率和准确性的工具&#xff0c;更希望能够保持文档的原始格式。我们观察到客户的需求广泛&#xff0c;包括多语言办公文件、研究文档和药品报批文件等&a…...

在pycharm中搭建yolo11分类检测系统--PyQt5学习(二)

第二部分 测试本地pycharm通过程序连接远程服务器autodl 模型的推理需要借助远程服务器autodl&#xff0c;但是界面的运行是在pycharm中&#xff0c;我的设想是按钮调用一个py文件就好了。 1. 本地运行PyQt5界面。 2. 当需要载入权重时&#xff0c;通过SSH连接到AutodL服务…...

汽车行驶工况特征参数:从“速度曲线”到“驾驶DNA”的硬核解码

作为新能源汽车行业的从业者&#xff0c;你是否曾困惑于这些问题&#xff1a; 为什么同一款电动车&#xff0c;不同用户的实际续航差异高达30%&#xff1f;如何精准量化驾驶行为对电池寿命的影响&#xff1f;车企标定的“NEDC续航”与真实路况差距的根源是什么&#xff1f; 这…...

dify本地部署,docker-plugin_daemon-1启动不了,一直报错

解决办法&#xff0c;修改这两个配置&#xff0c;然后重启 进入源代码目录&#xff0c;docker文件夹下 docker compose down docker compose up -d https://github.com/langgenius/dify/issues/17677...

2025 年第十五届 MathorCup 数学应用挑战赛 A 题:汽车风阻预测

A 题&#xff1a;汽车风阻预测 在空气动力学领域&#xff0c;空气阻力对汽车以及航空航天工业中载具的 性能和效率有着至关重要的影响。以往的研究表明&#xff0c;预测这种阻力需 要借助先进的工业仿真软件进行大规模流体力学模拟仿真&#xff0c;而该模拟 过程不仅算法复杂…...

AI Agents系列之AI代理架构体系

1. 引言 智能体架构是定义智能体组件如何组织和交互的蓝图,使智能体能够感知其环境、推理并采取行动。本质上,它就像是智能体的数字大脑——集成了“眼睛”(传感器)、“大脑”(决策逻辑)和“手”(执行器),用于处理信息并采取行动。 选择正确的架构对于构建有效的智能…...

使用Java动态数据生成PDF报告:简化您的报告导出流程

在当今的数据驱动世界中&#xff0c;能够快速且有效地将数据转化为可视化的报告是一项宝贵的技能。无论是商业分析、项目管理还是学术研究&#xff0c;PDF报告都是分享和存档信息的理想格式。在这篇博客中&#xff0c;我们将探讨如何使用Java编程语言结合iText库来动态生成包含…...

Sqlite3交叉编译全过程

Sqlite3交叉编译全过程 一、概述二、下载三、解压四、配置五、编译六、安装七、验证文件类型八、移植8.1、头文件sqlite3.h8.2、动态链接库移植8.3、静态态链接库移植 九、验证使用9.1. 关键函数说明 十、触发器使用十一、sqlite表清空且恢复id值十二、全文总结 一、概述 SQLi…...

Qt QThread 两种线程管理方法

在 Qt 中,QThread 有两种常见的用法,分别对应不同的线程管理模型。这两种方法各有优缺点,适用于不同的场景: 1. 子类化 QThread(继承 QThread,重写 run() 方法) 这是传统的线程用法,类似于 Java 或 C++ 标准库中的线程模型。通过继承 QThread 并重写 run() 方法,将需…...

React 中如何获取 DOM:用 useRef 操作非受控组件

&#x1f4cc; 场景说明 在写 React 的时候&#xff0c;通常我们是通过“受控组件”来管理表单元素&#xff0c;比如用 useState 控制 <input> 的值。 但有些时候&#xff0c;控制的需求只是临时性的&#xff0c;或者完全不需要重新渲染组件&#xff0c;这时候直接访问…...

GoogleCodeUtil.java

Google动态验证码实现 GoogleCodeUtil.java package zwf;import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.SecureRandom;/** https://mvnrepository.com/artifact/commons-codec/…...

Hutool之DateUtil:让Java日期处理变得更加简单

前言 在Java开发中&#xff0c;日期和时间的处理是一个常见问题。为了简化这个过程&#xff0c;许多开发者会使用第三方工具包&#xff0c;如Hutool。Hutool是一个Java工具包&#xff0c;提供了许多实用的功能&#xff0c;其中之一就是日期处理。日期时间工具类是Hutool的核心包…...

解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例

历史灾害文献分析方法论的研究&#xff0c;是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析&#xff0c;不仅能够重建千年尺度的灾害事件序列&#xff08;如台风、洪旱等&#xff09;&#xff0c;弥补仪器观测数据的时空局限性&#…...

DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析

随着大模型技术的迅猛发展&#xff0c;国产模型正逐渐崭露头角&#xff0c;尤其是DeepSeek-R3的发布&#xff0c;更是在AI技术社区中引起广泛关注。而与此同时&#xff0c;国际领先的GPT-4o和Claude-3.5-Sonnet也在不断迭代升级&#xff0c;持续刷新业界对AI能力的认知。下文将…...

智能翻译播放器,让无字幕视频不再难懂

打工人们你们好&#xff01;这里是摸鱼 特供版~ 今天给大家带来一款超牛的黑科技——Splayer&#xff0c;完全免费的智能翻译播放器&#xff0c;让你轻松看懂无字幕视频&#xff01; 推荐指数&#xff1a;★★★★★ 软件简介 Splayer 是一款完全免费的智能翻译播放器&#…...

快手本地生活2024年GMV同增200%,“新线城市+AI”将成增长引擎

4月17日&#xff0c;“新线大市场&#xff0c;AI新机遇”快手本地生活2025聚力大会在沈阳召开。 会上&#xff0c;快手高级副总裁、本地生活事业部负责人笑古在聚力大会上表示&#xff0c;“新线城市AI”将成为快手本地生活的增长引擎。 据「TMT星球」了解&#xff0c;2024年…...

第七篇:系统分析师第三遍——1、2章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&#xff0c;训练快速阅读能力、掌…...

2025妈妈杯数学建模D题完整分析论文(共42页)(含模型建立、代码)

2025 年第十五届 MathorCup 数学建模D题完整分析论文 目录 摘要 一、问题分析 二、问题重述 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;MATLAB和Python&#xff09; 4.1.4问题1结果…...

软考高级-系统架构设计师 论文范文参考(一)

文章目录 论SOA技术的应用论SOA在企业信息化中的应用论UP&#xff08;统一过程方法&#xff09;的应用论分布式数据库的设计与实现论改进Web服务器性能的有关技术论基于UML的需求分析论基于构件的软件开发论基于构件的软件开发(二) 论SOA技术的应用 摘要&#xff1a;  本人于…...

江湖路远,唯PUT可稳:Express 路由更新招式全解

前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...

【k8s系列1】一主两从结构的环境准备

环境准备 虚拟机软件准备及安装&#xff0c;这里就不详细展开了&#xff0c;可以看文章:【一、虚拟机vmware安装】 linux环境准备及下载&#xff0c;下载镜像centOS7.9&#xff0c;以前也有写过这个步骤的文章&#xff0c;可以看&#xff1a;【二、安装centOS】 开始进入正题…...

通过特定协议拉起 electron 应用

在 Android 通过 sheme 协议可以拉起其他应用。 electron 应用也可以通过类似特定协议被拉起。 在同时有 web、客户端的应用里&#xff0c;可以通过这种方式在 web 拉起客户端。 支持拉起客户端 const PROTOCOL xxxif (process.defaultApp) {// 这里是开发环境&#xff0c;有…...

IDEA MyBatisCodeHelper Pro插件高版本解密

声明&#xff0c;该方法仅仅作为个人研究学习使用&#xff0c;请勿传播 版本说明 系统&#xff1a;macOS&#xff08;Windows同理&#xff09;IDE&#xff1a;IntelliJ IDEA 2024.4MyBatisCodeHelper Pro 3.4 环境准备 从插件市场下载MyBatisCodeHelper Pro 找到MyBatisCo…...