从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?
-
提高代码可维护性:在大型项目中,代码的可维护性至关重要。TypeScript 的静态类型系统就像是给代码加上了一层坚固的 “保护网”,能有效避免因类型错误导致的难以调试的问题 。比如在一个电商项目中,商品数据可能涉及各种字段,像价格、库存数量等。使用 TypeScript,我们可以为这些数据字段明确指定类型,这样在后续对商品数据进行操作时,就能提前发现类型不匹配的错误,而不是等到用户下单时才发现库存数量变成了字符串类型,导致计算错误。这大大降低了代码维护的难度和成本,让项目的后续迭代更加顺畅。
-
增强代码可读性:清晰的类型定义让代码的结构和意图一目了然。假设我们在开发一个社交应用,有一个处理用户信息的函数,使用 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 服务器不可用”错误
远程过程调用(Remote Procedure Call, RPC)是允许客户端在不同计算机上执行进程的众多可用网络进程之一。本文将深入探讨RPC如何在不同的软件系统之间实现无缝消息交换,同时重点介绍与RPC相关的常见错误的一些原因。 什么是远程过…...
【redis】五种数据类型和编码方式
文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串:Java 中的 String哈希:Java 中的 HashMap列表:Java 中的 List集合:Java 中的 Set有序集合:除了存 member 之外,还有…...
今日头条文章爬虫教程
今日头条文章爬虫教程 随着互联网的发展,新闻资讯类平台如今日头条积累了海量的数据。对于数据分析师、研究人员等群体来说,获取这些数据进行分析和研究具有重要的价值。本文将介绍如何使用Python编写爬虫,爬取今日头条的文章数据。 一、准…...
使用Modelsim手动仿真
FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…...
从Manus看网络安全:通用AI智能体重构安全运营
当通用AI智能体遇见网络安全 开启主动防御的跃迁 在勒索软件平均潜伏期缩短至3.7天、APT攻击复杂度指数级攀升的当下,传统SOAR产品(安全编排、自动化和响应)正面临两大困境: 规则依赖症:基于Playbook的响应逻辑&…...
南开提出1Prompt1Story,无需训练,可通过单个连接提示实现一致的文本到图像生成。
(1Prompt1Story)是一种无训练的文本到图像生成方法,通过整合多个提示为一个长句子,并结合奇异值重加权(SVR)和身份保持交叉注意力(IPCA)技术,解决了生成图像中身份不一致…...
hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索
场景业务: 多次运用AgGridReact的table 列表 思路: 运用自定义hooks进行二次封装: 通用配置例如:传参的参数,传参的url,需要缓存的key这些键值类 定制化配置例如:需要对table 的一些定制化传…...
Manus无需邀请码即可使用的平替方案-OpenManus实测
文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...
常用的gpt
1、DeepSeek 好用。可惜现在热度上去了,经常查技术问题会报网络繁忙 2、Qwen Chat Qwen Chat 千问,阿里的gpt。需要注册账号,好用程度感觉跟deepSeek差不多。并且不会像deepSeek一样报网络繁忙 3、文心一样 百度的。相对上2个技术问题较弱…...
【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
前言 由于deepseek网页端在白天日常抽风,无法正常的使用,所以调用API就成了目前最好的选择,尤其是Deepseek的API价格低得可怕,这不是和白送的一样吗!然后使用过很多本地部署接入API的方式,例如Chatbox、Pa…...
MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信
在现代电子设备的通信领域,串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色,发挥着不可或缺的作用。下面,我们将依据提供的资料,深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…...
vue2项目开启br压缩
<在 Vue 2 项目中,使用 br 压缩通常是为了减少文件大小,从而加快网页加载速度。br 是一种由 Google 开发的压缩格式,全称为 Brotli。在 Vue 2 项目中,你可以通过配置构建工具(如 Webpack)来启用对 .br 文…...
jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)
jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版(需要对 Linux 操作有一定基础)二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址: https://www.oracle.com/java/technologies/downloads/#java2…...
DataWhale-三月学习任务-大语言模型初探(一、二、五章学习)
本次学习计划,参考赵鑫老师团队出版的大语言模型一书,链接如下: 书籍及参考资料链接 第一章节 从技术路径上来说,语言模型(LanguageModel, LM)是提升机器语言智能(Language Intelligence&…...
【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?
概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…...
Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案
一、Nuxt.js 的核心价值与演进 1.1 现代 Web 开发的挑战与破局 根据 2023 年 Web Almanac 统计,全球 Top 1000 网站中有 68% 采用服务端渲染方案。Nuxt.js 作为 Vue 生态的 SSR 框架,完美解决了以下痛点: SEO 困境:传统 SPA 的…...
PPT内视频播放无法播放的原因及解决办法
PPT内视频无法播放,通常是视频编解码的问题。目前我遇到的常见的视频编码格式有H.264,H.265,VP9,AV1这4种。H.264编解码的视频,Windows原生系统可以直接播放,其他的视频编码格式需要安装对应的视频编解码插…...
关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案
IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB,以及三菱、欧姆龙等各种品牌的PLC之间通讯,支持Ethernet/IP(CIP)、Profinet(S7),以及FINS、MC等工业自动化常用协议,同时也支持PLC与Modbus协议的工业机器人、智能仪…...
为什么要开源?
互联网各领域资料分享专区(不定期更新): Sheet 正文 开源(Open Source)是软件、硬件或知识产品将其源代码或设计公开,允许任何人自由使用、修改和分发的模式。开源的核心不仅是“免费”,更是一种协作和透明的理念。以下是开源的主要动因和优势: 一、技术驱动:提升质量…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
Linux入门(十五)安装java安装tomcat安装dotnet安装mysql
安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了,系统很多命…...
GB/T 43887-2024 核级柔性石墨板材检测
核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...
