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

从0到1,带你开启TypeScript的奇妙之旅

目录

一、TypeScript 是什么?

二、为什么要学习 TypeScript?

三、快速上手:环境搭建与 Hello World

(一)安装 TypeScript

(二)创建第一个 TypeScript 文件

(三)编译 TypeScript 文件

(四)运行编译后的 JavaScript 文件

四、深入 TypeScript 核心语法

(一)基本数据类型

(二)变量声明与类型推断

(三)函数与类型注解

(四)数组与元组

(五)对象类型与接口

(六)类与面向对象编程

五、高级特性探索

(一)泛型

(二)类型别名与联合类型

(三)类型守卫与类型断言

六、实战项目:用 TypeScript 构建一个简单 Web 应用

(一)项目搭建

(二)功能实现

(三)部署

七、总结与展望


一、TypeScript 是什么?

        TypeScript 是由微软开发的一款开源编程语言,它是 JavaScript 的超集,简单来说,就是在 JavaScript 的基础上添加了静态类型系统 ,这意味着在编写 TypeScript 代码时,你可以为变量、函数参数和返回值指定类型。比如在 JavaScript 中,我们声明一个变量并赋值:

let num;num = 10;num = "hello";

        这里num变量的类型可以随意改变,在代码规模较小的时候,这种灵活性很方便,但当项目逐渐庞大,就很容易出现类型相关的错误,而且很难排查。

        而在 TypeScript 中,我们可以这样写:

let num: number;num = 10;num = "hello";

        当我们尝试将字符串"hello"赋值给声明为number类型的num时,TypeScript 编译器就会报错,提示类型不匹配,这能帮助我们在开发阶段就发现并解决问题,而不是等到代码运行时才暴露错误。

        再比如函数参数和返回值类型的定义,在 JavaScript 中:

function add(a, b) {return a + b;}let result = add(1, "2");

        这里调用add函数时传入了一个数字和一个字符串,虽然代码不会报错,但结果可能并非我们预期。

        在 TypeScript 中:

function add(a: number, b: number): number {return a + b;}let result = add(1, "2");

        当传入参数类型不匹配时,TypeScript 编译器同样会给出错误提示,确保函数在正确的类型下运行。

        从这些简单对比就能看出,TypeScript 通过静态类型检查,大大提高了代码的可靠性和可维护性,减少了运行时错误的发生概率,让我们的代码更加健壮 。同时,它完全兼容 JavaScript,现有的 JavaScript 代码可以直接在 TypeScript 项目中使用,这使得将 JavaScript 项目迁移到 TypeScript 变得相对容易,也能让开发者逐步适应 TypeScript 的开发模式。

二、为什么要学习 TypeScript?

  1. 提高代码可维护性:在大型项目中,代码的可维护性至关重要。TypeScript 的静态类型系统就像是给代码加上了一层坚固的 “保护网”,能有效避免因类型错误导致的难以调试的问题 。比如在一个电商项目中,商品数据可能涉及各种字段,像价格、库存数量等。使用 TypeScript,我们可以为这些数据字段明确指定类型,这样在后续对商品数据进行操作时,就能提前发现类型不匹配的错误,而不是等到用户下单时才发现库存数量变成了字符串类型,导致计算错误。这大大降低了代码维护的难度和成本,让项目的后续迭代更加顺畅。

  2. 增强代码可读性:清晰的类型定义让代码的结构和意图一目了然。假设我们在开发一个社交应用,有一个处理用户信息的函数,使用 TypeScript 为函数参数和返回值添加类型注解后,其他开发人员一看代码就能明白这个函数的输入输出要求,无需花费额外时间去猜测和调试。例如:

interface User {name: string;age: number;email: string;}function getUserInfo(user: User): string {return `Name: ${user.name}, Age: ${user.age}, Email: ${user.email}`;}

        这样的代码,即使隔了很长时间再来看,也能迅速理解其功能,大大提高了代码的可读性和可理解性 。

        3. 类型推断提升开发效率:TypeScript 具有强大的类型推断功能,它能自动根据变量的赋值和使用情况推断出变量的类型。在开发过程中,我们无需总是显式地声明所有变量的类型,这在一定程度上减少了代码的编写量。例如:

let num = 10;let str = "hello";

        这里num会被自动推断为number类型,str会被推断为string类型,我们在后续使用这些变量时,TypeScript 会根据推断的类型进行类型检查,既提高了开发效率,又保证了类型的安全性 。

        4. 广泛的行业应用:TypeScript 在行业中的应用越来越广泛。许多知名项目都在使用 TypeScript,像 Angular 框架就是完全基于 TypeScript 开发的,React 项目中也有大量使用 TypeScript 的案例 。据相关调查显示,在 2022 年,使用 TypeScript 的 Web 开发者占比达到了 84%,并且这个比例还在逐年上升 。这充分说明了 TypeScript 在前端开发领域的重要地位和受欢迎程度,掌握 TypeScript,无疑能让我们在求职和项目开发中更具竞争力。

三、快速上手:环境搭建与 Hello World

        在开始深入学习 TypeScript 之前,我们先快速搭建开发环境,体验一下 TypeScript 的开发流程 。

(一)安装 TypeScript

        首先,确保你已经安装了 Node.js,因为 TypeScript 依赖于 Node.js 运行时环境,Node.js 自带 npm 包管理器,我们可以使用 npm 来安装 TypeScript 。打开命令行工具,输入以下命令进行全局安装:

npm install -g typescript

        安装完成后,在命令行输入tsc -v,如果能看到 TypeScript 的版本号,就说明安装成功了 。比如我的环境中,执行tsc -v后输出Version 5.2.2,这表明 TypeScript 已成功安装在我的系统中 。

(二)创建第一个 TypeScript 文件

        在你喜欢的代码编辑器中(如 Visual Studio Code,简称 VSCode,它对 TypeScript 有非常友好的支持),创建一个新文件,命名为hello.ts 。然后在文件中输入以下代码:

let message: string = "Hello, TypeScript!";console.log(message);

        这里我们声明了一个类型为string的变量message,并赋值为"Hello, TypeScript!",然后使用console.log将其输出到控制台 。

(三)编译 TypeScript 文件

        回到命令行,切换到hello.ts所在的目录,执行编译命令:

tsc hello.ts

        执行该命令后,你会发现同目录下多了一个hello.js文件,这就是 TypeScript 编译后的 JavaScript 文件 。打开hello.js,内容如下:

var message = "Hello, TypeScript!";console.log(message);

        可以看到,编译后的代码去掉了类型注解,变成了标准的 JavaScript 代码 。这就是 TypeScript 的编译过程,它将带有类型信息的 TypeScript 代码转换为可以在浏览器或 Node.js 环境中运行的 JavaScript 代码 。在这个过程中,TypeScript 编译器会检查代码中的类型错误,如果有错误,会在命令行中给出提示,例如,如果你将message的类型声明为number,却赋值为字符串,编译时就会报错:

let message: number = "Hello, TypeScript!";

        执行tsc hello.ts时,命令行会提示:error TS2322: Type '"Hello, TypeScript!"' is not assignable to type 'number'.,这就帮助我们在开发阶段及时发现并修正类型错误 。

(四)运行编译后的 JavaScript 文件

        最后,我们可以使用 Node.js 来运行编译后的hello.js文件,在命令行输入:

node hello.js

        你会在控制台看到输出:Hello, TypeScript!,至此,我们成功运行了第一个 TypeScript 程序 。这个简单的示例展示了 TypeScript 从编写代码到编译、运行的基本流程,为我们后续深入学习 TypeScript 的各种特性打下了基础 。

四、深入 TypeScript 核心语法

(一)基本数据类型

        TypeScript 支持多种基本数据类型,这些类型是构建复杂数据结构和程序逻辑的基础 。

        布尔类型(boolean):表示逻辑值,只有true和false两个值 。例如:

let isDone: boolean = false;

        数字类型(number):用于表示数值,包括整数和浮点数 。示例如下:

let count: number = 10;let price: number = 3.99;

        字符串类型(string):用于表示文本数据 。可以使用单引号或双引号来定义字符串 。例如:

let message: string = "Hello, TypeScript!";

        数组类型(array):用于表示多个相同类型的值的集合 。有两种定义方式,一种是使用方括号语法,另一种是使用Array<T>泛型语法 。示例:

let numbers: number[] = [1, 2, 3, 4, 5];let fruits: Array<string> = ["apple", "banana", "orange"];

        元组类型(tuple):元组是一种特殊的数组,它允许表示一个已知元素数量和类型的数组,每个元素的类型可以不同 。比如:

let person: [string, number] = ["John", 25];

        枚举类型(enum):枚举类型用于定义一组命名的常量 。例如:

enum Color {Red,Green,Blue}let myColor: Color = Color.Green;

相关文章:

从0到1,带你开启TypeScript的奇妙之旅

目录 一、TypeScript 是什么? 二、为什么要学习 TypeScript? 三、快速上手:环境搭建与 Hello World (一)安装 TypeScript (二)创建第一个 TypeScript 文件 (三)编译 TypeScript 文件 (四)运行编译后的 JavaScript 文件 四、深入 TypeScript 核心语法 (一)…...

如何修复“RPC 服务器不可用”错误

远程过程调用&#xff08;Remote Procedure Call&#xff0c; RPC&#xff09;是允许客户端在不同计算机上执行进程的众多可用网络进程之一。本文将深入探讨RPC如何在不同的软件系统之间实现无缝消息交换&#xff0c;同时重点介绍与RPC相关的常见错误的一些原因。 什么是远程过…...

【redis】五种数据类型和编码方式

文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串&#xff1a;Java 中的 String哈希&#xff1a;Java 中的 HashMap列表&#xff1a;Java 中的 List集合&#xff1a;Java 中的 Set有序集合&#xff1a;除了存 member 之外&#xff0c;还有…...

今日头条文章爬虫教程

今日头条文章爬虫教程 随着互联网的发展&#xff0c;新闻资讯类平台如今日头条积累了海量的数据。对于数据分析师、研究人员等群体来说&#xff0c;获取这些数据进行分析和研究具有重要的价值。本文将介绍如何使用Python编写爬虫&#xff0c;爬取今日头条的文章数据。 一、准…...

使用Modelsim手动仿真

FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…...

从Manus看网络安全:通用AI智能体重构安全运营

当通用AI智能体遇见网络安全 开启主动防御的跃迁 在勒索软件平均潜伏期缩短至3.7天、APT攻击复杂度指数级攀升的当下&#xff0c;传统SOAR产品&#xff08;安全编排、自动化和响应&#xff09;正面临两大困境&#xff1a; 规则依赖症&#xff1a;基于Playbook的响应逻辑&…...

南开提出1Prompt1Story,无需训练,可通过单个连接提示实现一致的文本到图像生成。

&#xff08;1Prompt1Story&#xff09;是一种无训练的文本到图像生成方法&#xff0c;通过整合多个提示为一个长句子&#xff0c;并结合奇异值重加权&#xff08;SVR&#xff09;和身份保持交叉注意力&#xff08;IPCA&#xff09;技术&#xff0c;解决了生成图像中身份不一致…...

hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索

场景业务&#xff1a; 多次运用AgGridReact的table 列表 思路&#xff1a; 运用自定义hooks进行二次封装&#xff1a; 通用配置例如&#xff1a;传参的参数&#xff0c;传参的url&#xff0c;需要缓存的key这些键值类 定制化配置例如&#xff1a;需要对table 的一些定制化传…...

Manus无需邀请码即可使用的平替方案-OpenManus实测

文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...

常用的gpt

1、DeepSeek 好用。可惜现在热度上去了&#xff0c;经常查技术问题会报网络繁忙 2、Qwen Chat Qwen Chat 千问&#xff0c;阿里的gpt。需要注册账号&#xff0c;好用程度感觉跟deepSeek差不多。并且不会像deepSeek一样报网络繁忙 3、文心一样 百度的。相对上2个技术问题较弱…...

【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑

前言 由于deepseek网页端在白天日常抽风&#xff0c;无法正常的使用&#xff0c;所以调用API就成了目前最好的选择&#xff0c;尤其是Deepseek的API价格低得可怕&#xff0c;这不是和白送的一样吗&#xff01;然后使用过很多本地部署接入API的方式&#xff0c;例如Chatbox、Pa…...

MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信

在现代电子设备的通信领域&#xff0c;串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色&#xff0c;发挥着不可或缺的作用。下面&#xff0c;我们将依据提供的资料&#xff0c;深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…...

vue2项目开启br压缩

<在 Vue 2 项目中&#xff0c;使用 br 压缩通常是为了减少文件大小&#xff0c;从而加快网页加载速度。br 是一种由 Google 开发的压缩格式&#xff0c;全称为 Brotli。在 Vue 2 项目中&#xff0c;你可以通过配置构建工具&#xff08;如 Webpack&#xff09;来启用对 .br 文…...

jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)

jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版&#xff08;需要对 Linux 操作有一定基础&#xff09;二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/#java2…...

DataWhale-三月学习任务-大语言模型初探(一、二、五章学习)

本次学习计划&#xff0c;参考赵鑫老师团队出版的大语言模型一书&#xff0c;链接如下&#xff1a; 书籍及参考资料链接 第一章节 从技术路径上来说&#xff0c;语言模型&#xff08;LanguageModel, LM&#xff09;是提升机器语言智能&#xff08;Language Intelligence&…...

【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?

概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于&#xff1a;某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…...

Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案

一、Nuxt.js 的核心价值与演进 1.1 现代 Web 开发的挑战与破局 根据 2023 年 Web Almanac 统计&#xff0c;全球 Top 1000 网站中有 68% 采用服务端渲染方案。Nuxt.js 作为 Vue 生态的 SSR 框架&#xff0c;完美解决了以下痛点&#xff1a; SEO 困境&#xff1a;传统 SPA 的…...

PPT内视频播放无法播放的原因及解决办法

PPT内视频无法播放&#xff0c;通常是视频编解码的问题。目前我遇到的常见的视频编码格式有H.264&#xff0c;H.265&#xff0c;VP9&#xff0c;AV1这4种。H.264编解码的视频&#xff0c;Windows原生系统可以直接播放&#xff0c;其他的视频编码格式需要安装对应的视频编解码插…...

关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案

IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB&#xff0c;以及三菱、欧姆龙等各种品牌的PLC之间通讯&#xff0c;支持Ethernet/IP(CIP)、Profinet(S7)&#xff0c;以及FINS、MC等工业自动化常用协议&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪…...

为什么要开源?

互联网各领域资料分享专区(不定期更新): Sheet 正文 开源(Open Source)是软件、硬件或知识产品将其源代码或设计公开,允许任何人自由使用、修改和分发的模式。开源的核心不仅是“免费”,更是一种协作和透明的理念。以下是开源的主要动因和优势: 一、技术驱动:提升质量…...

WPF在特定领域的应用:打造一款专业的图像编辑工具

WPF在特定领域的应用&#xff1a;打造一款专业的图像编辑工具 一、前言二、WPF 基础概念2.1 什么是 WPF2.2 WPF 的核心特性 三、图像编辑工具的需求分析3.1 基本功能3.2 高级功能 四、使用 WPF 实现图像编辑工具4.1 项目搭建4.2 图像加载与显示4.3 基本编辑操作4.4 图层管理4.5…...

从0开始的操作系统手搓教程43——实现一个简单的shell

目录 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read putchar和clear 上班&#xff1a;实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…...

‌Visual Studio Code(VS Code)支持的编程语言

‌JavaScript‌&#xff1a;VS Code 原生支持 JavaScript&#xff0c;提供语法高亮、代码折叠、自动补全等功能。推荐使用ESLint和Prettier进行代码格式化和错误检查‌。 ‌TypeScript‌&#xff1a;作为 JavaScript 的超集&#xff0c;TypeScript 在 VS Code 中也得到原生支持…...

探索AI对冲基金:开源自动化交易系统的革新之路

在量化交易领域,人工智能技术的应用正悄然改变传统对冲基金的运作模式。GitHub上的开源项目ai-hedge-fund为开发者和金融从业者提供了一个独特的实践平台。该项目通过多智能体系统架构,整合市场数据分析、量化策略生成、风险管理和投资组合优化等核心功能,实现了从数据采集到…...

C语言每日一练——day_3(快速上手C语言)

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第三天。&#xff08;会连续更新&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…...

vue3中接收props的两种写法

在 Vue 3 中&#xff0c;接收 props 有两种主要的写法&#xff0c;分别是运行时声明和基于类型的声明。下面为你详细介绍这两种写法。 1. 运行时声明 运行时声明是 Vue 2 中就已经存在的方式&#xff0c;在 Vue 3 中依然可以使用。这种方式通过在组件中使用 defineProps 宏来…...

Django下防御Race Condition

目录 漏洞原因 环境搭建 复现 A.无锁无事务时的竞争攻击 B.无锁有事务时的竞争攻击 防御 A.悲观锁加事务防御 B.乐观锁加事务防御 总结 漏洞原因 Race Condition 发生在多个执行实体&#xff08;如线程、进程&#xff09;同时访问共享资源时&#xff0c;由于执行顺序…...

Vue 项目中,.env文件怎么用?

在 Vue 项目中&#xff0c;.env 文件用于存储环境变量&#xff0c;不同的环境&#xff08;如开发环境、测试环境、生产环境&#xff09;可以使用不同的 .env 文件来管理对应的配置信息。以下是关于 Vue 项目中 .env 文件的详细使用方法&#xff1a; 1. 项目创建 确保你已经使…...

LeetCode hot 100—爬楼梯

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例…...

【js逆向】

地址&#xff1a;aHR0cHM6Ly93d3cud2VpYm90b3AuY24vMi4wLw f12进入 debugger&#xff0c;过debugger 查看预览数据 全局搜索 请求网址中的 api.weibotop.cn 在下方疑似找到了加密和解密的函数 断点调试 控制台输出 那个n就是 常见的 cryptoJs库 const cryptoJs require(cry…...