TypeScript教程(一)之我们为什么要学TypeScript

news2024/11/15 9:08:11

根据软件开发设计公司 The Software House 针对 2022 年前端市场状态的调查显示,84% 的受访者都在使用 TypeScript,43% 的受访者甚至认为 TypeScript 将超越 JavaScript 成为前端开发的主要语言。TypeScript 这些年越来越火,可以说是前端工程师的必备技能了,各大框架都基于它实现。

什么是TypeScript?

TypeScript(中文名:类型脚本)是一种由微软开发的开源编程语言。它是 JavaScript 的一个超集。它给 JS 添加了一套静态类型系统,意味着所有合法的 JavaScript 代码都是合法的 TypeScript 代码,但 TypeScript 还在此基础上添加了额外的特性和静态类型系统。

image.png

JavaScript用的好好的,为什么还要用TypeScrip替换JavaScript?

JavaScript的缺点

著名的Jeff Atwood 说过:“any application that can be written in JavaScript, will eventually be written in JavaScript”翻译过来的意思就是任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现。

随着近几年前端领域的快速发展,我们也看到了越来越多的应用开始使用JavaScript来实现。例如:移动端、小程序端、桌面端应用程序、服务器端。但是随着越来越多的项目开始使用JavaScript,JavaScript的缺点也暴露出来了。

  1. 类型不确定性: JavaScript 是一门弱类型语言,变量的类型可以在运行时随时改变,这可能导致类型相关的错误只有在运行时才能被发现,增加了调试的难度。
  2. 难以维护: 由于 JavaScript 允许非常灵活的编码方式,可能导致代码库变得难以维护,特别是在没有良好的结构和文档的情况下。
  3. 全局作用域: JavaScript 的变量作用域是函数级别的,而不是块级别的,这可能导致变量被意外地提升到函数的顶部,引发意外的行为。
  4. 异步编程复杂性: JavaScript 的异步编程模型可能导致回调地狱(Callback Hell),即多个嵌套的回调函数,难以理解和维护。
  5. 浏览器兼容性: 不同的浏览器可能对 JavaScript 的实现存在不同的行为,导致代码在不同浏览器上的运行结果不一致。
  6. 安全性问题: JavaScript 在浏览器中运行,可能受到跨站脚本攻击(XSS)等安全问题的影响。
  7. 单线程限制: JavaScript 是单线程的,意味着在同一时间只能执行一个任务,处理大量计算密集型任务时可能会出现性能瓶颈。
  8. 缺少一些面向对象特性: 相对于一些其他编程语言,JavaScript 的面向对象特性可能相对较弱,尤其是在 ES5 之前的版本。
  9. 没有类型检查支持: 在 JavaScript 中,开发者需要手动进行类型检查和验证,而没有 TypeScript 那样的静态类型检查功能。

为了解决这些缺陷,我们开发了TypeScript语言,帮助我们更好的去编程。

TypeScript的优点:
  1. 静态类型检查: TypeScript 引入了静态类型系统,能够在编译阶段检查类型错误,减少运行时错误,提高代码质量和稳定性。
  2. 代码可读性和可维护性: 类型注解使得代码更加清晰易懂,开发者可以更容易理解代码的意图和结构。这有助于团队协作,并且减少了一些由于类型不明确而导致的混乱和错误。
  3. 智能的开发工具支持: TypeScript 集成了强大的类型推断和代码补全功能,提供更好的开发工具支持,包括 IDE(集成开发环境)中的代码提示、错误检测和重构功能。
  4. 适用于大型项目: TypeScript 在大型项目中特别有用,因为它可以帮助管理复杂的代码库,减少潜在的错误,提高代码的可维护性,使得团队能够更轻松地协同开发。
  5. 代码重构和迁移: 强大的类型系统使得代码重构和迁移更加容易,可以在进行较大的代码更改时保持代码的稳定性。
  6. 兼容性: TypeScript 兼容标准的 JavaScript,因此可以逐步将现有的 JavaScript 项目迁移到 TypeScript,无需一次性完成所有更改。
  7. 最新 ECMAScript 特性支持: TypeScript 支持最新的 ECMAScript 标准特性,让开发者可以使用 JavaScript 社区中的最新技术。
  8. 丰富的类型系统: TypeScript 的类型系统相当强大,支持联合类型、交叉类型、枚举、泛型等高级概念,使得开发者可以更灵活地定义数据结构和函数。
  9. 模块化和命名空间: TypeScript 提供了模块化和命名空间的支持,有助于组织和管理代码,并促进了代码的重用性。

也正是因为有这些特性,TypeScript目前已经在很多地方被应用。

  • Angular源码在很早就使用TypeScript来进行了重写,并且开发Angular也需要掌握TypeScript;
  • Vue3源码也采用了TypeScript进行重写,在阅读源码时你会看到大量TypeScript的语法;
  • 包括目前已经变成最流行的编辑器VSCode也是使用TypeScript来完成的;
  • 包括在React中已经使用的ant-design的UI库,也大量使用TypeScript来编写;
  • 目前公司非常流行Vue3+TypeScript、React+TypeScript的开发模式;
  • 包括小程序开发,也是支持TypeScript的;
TypeScript 与 JavaScript 的区别
TypeScriptJavaScript
JavaScript 的超集用于解决大型项目的代码复杂性一种脚本语言,用于创建动态网页。
可以在编译期间发现并纠正错误作为一种解释型语言,只能在运行时发现错误
强类型,支持静态和动态类型弱类型,没有静态类型选项
最终被编译成 JavaScript 代码,使浏览器可以理解可以直接在浏览器中使用
支持模块、泛型和接口不支持模块,泛型或接口
支持 ES3,ES4,ES5 和 ES6 等不支持编译其他 ES3,ES4,ES5 或 ES6 功能
社区的支持仍在增长,而且还不是很大大量的社区支持以及大量文档和解决问题的支持

所以学习 TypeScript 不仅是一种重要的选择,更是一种对完美的追求。随着项目规模和复杂性的不断增加,强大的类型系统可以为你的代码增添坚实的保障,让你在早期捕获潜在的错误,从而节省宝贵的时间和资源。无论你是正在追求个人成长还是参与团队合作,掌握 TypeScript 将赋予你更清晰的代码结构、更强大的开发工具支持,以及更高效的协作能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

影视会员官方渠道api对接

API对接是指两个不同的软件系统或应用程序之间通过API(应用程序编程接口)进行交互的过程。这种交互允许数据和功能的共享,而不必暴露系统的内部工作原理。在影视会员充值场景中,API对接具有以下几个关键特点和优势: 数…

【Linux系列】AWK命令使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java面试题--JVM大厂篇之JVM大厂面试题及答案解析(4)

💖💖💖亲爱的朋友们,热烈欢迎你们来到青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博…

使用VBA快速创建非规则数据图表

实例需求:工作表中共有4组数据,第一组数据涵盖所有日期,其他3组均为断续数据。 现在需要创建如下图所示的线图,由于数据区域是非连续的,因此无法直接创建图表。 需要先将数据表按照日期对齐,如下图所示&…

《深度学习》 OpenCV 计算机视觉入门 (中篇)

目录 一、OpenCV函数使用 1、改变像素值 2、图像切片合并 1)直接截取相加 2)使用cv2.add合并 3)此时亮度太高了,需要降低亮度 3、边界填充 1)常数填充 2)镜面反射填充(复制交界处&…

论文仍在苦恼?分享最实用6款AI论文工具网站的汇总!

论文写作是学术研究中的重要环节,然而,面对繁重的写作任务,许多学者和学生常常感到力不从心。幸运的是,随着人工智能技术的飞速发展,一系列AI论文写作工具应运而生,极大地简化了论文写作流程,提…

【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池

目录 一. Mybatis介绍 二. Mybatis搭建 1. 导入Mybatis依赖的jar包 2. 创建Mybatis全局配置文件 3. 定义一个接口 4. 创建sql映射文件 5. 测试 * MyBatisX插件安装 三. 数据库连接池 四. 参数传递 1. 将数据封装到对象中 2. 使用Param注解 五. 数据库事务 六.…

11、Redis高级:Key设置、BigKey解决、批处理优化、集群下批处理、慢查询

Redis高级篇之最佳实践 今日内容 Redis键值设计批处理优化服务端优化集群最佳实践 1、Redis键值设计 1.1、优雅的key结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id]长度不超过…

【golang学习之旅】复杂数据类型——切片(slice)

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错:a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

OpenHarmony实战开发: unittest单元测试的编写

背景 程序开发与单元测试二者密不可分,是每个开发人员的基本业务。当功能性代码开发完成后,要自行测试其是否满足设计预期,如果不满足就要回去完善代码,满足则可以提交功能代码及测试用例。 测试用例的另一个重要作用就是阅读者…

【USRP】 Link 16 战术数据链 实训系统

Link 16 战术数据链 实训系统 一、基于USRP的Link16平台简介1、整体架构2、JTIDS终端架构3、平台特点3.1、提高技术理解与应用能力3.2、培养创新思维与问题解决能力3.3、加强跨学科融合与团队合作 4、平台建设4.1、基础理论教学模块4.2、LabVIEW 算法模块4.3、USRP仿真模块4.4、…

如何用ChatGPT快速提升论文质量:实用技巧大公开

近年来,人工智能技术急速发展,尤其在自然语言处理领域取得了显著进展。作为OpenAI推的一款先进的语言模型,ChatGPT不仅在日常交互中表现卓越,也在专业写作领域显示了巨大的潜力。本文旨在详尽介绍如何高效运用ChatGPT来撰写和修改…

JWT双令牌认证实现无感Token自动续约

概念 JSON Web Token (JWT)是一个开放标准(RFC 7519) ,它定义了一种紧凑和自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。此信息可以进行验证和信任,因为它是经过数字签名的。JWT 可以使用机密(使用 HMAC 算法)或使用 RSA 或 E…

LeetCode --- 411周赛

题目列表 3258. 统计满足 K 约束的子字符串数量 I 3259. 超级饮料的最大强化能量 3260. 找出最大的 N 位 K 回文数 3261. 统计满足 K 约束的子字符串数量 II 一、统计满足K约束的子字符串数量I 这种要求满足区间内某种性质的题,一般都可以用滑动窗口来做。这题…

STM32MP157_uboot_初次编译

STM32MP157_uboot_初次编译 前言: 为了快速入门,这边选择直接使用正点原子提供的uboot源码,先体验一下uboot的编译流程,为后面的移植原厂uboot做环境准备。 1、获取正点原子的uboot源码(复制到虚拟机里面) …

均值漂移算法原理及Python实践

均值漂移算法(Mean Shift Algorithm)是一种基于密度的非参数聚类算法,其原理主要基于核密度估计和梯度上升方法。以下是均值漂移算法原理的详细解析: 1. 基本思想 均值漂移算法的基本思想是通过迭代地更新数据点的位置&#xff…

Android APK优化系列瘦身篇:实战一个APK从11MB压缩到4MB,APK无用资源去除与代码压缩、混淆,瘦身维度的选型分析

目录: 为什么要进行APK瘦身呢?APK瘦身主要是瘦身哪些呢? a. 优化resources.arsc: b. res优化 c. lib优化 d. 资源优化,代码混淆和压缩总结 一、为什么要进行APK瘦身呢? 减少下载时间和流量消耗&#xff1…

el-table 表格自定义添加表格数据后自动滚动到最底部

动态表格,可以新增行列数,为了用户体验,新增后超出表格流体高度后,自动滚动到最下方 需要element-plus如下api 代码如下: const addCapacity () > {inputList.value.push({name: "",desc: "&quo…

案例-登录认证

案例-登录认证 登录认证。 最终实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。 1. 登录功能 1.1 需求 在登录界面中,我们可以输入用户的用户名以及密码,然后点击 “登录” 按钮就要请求服务器,服务端判断用户输入…

streamlit创建python的web应用

目录 简介基本示例:运行 Streamlit 应用: 简介 Streamlit 是一个开源的 Python 库,可以让你快速创建和分享自定义的 Web 应用,尤其适用于机器学习和数据科学项目。它简化了将数据脚本转换为交互式应用的过程,不需要任…