当前位置: 首页 > 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)是软件、硬件或知识产品将其源代码或设计公开,允许任何人自由使用、修改和分发的模式。开源的核心不仅是“免费”,更是一种协作和透明的理念。以下是开源的主要动因和优势: 一、技术驱动:提升质量…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...