❤️表弟说看了这本书后,他的TypeScript技术已经登峰造极了!❤️(一)

简介: ❤️表弟说看了这本书后,他的TypeScript技术已经登峰造极了!❤️

在看这篇文章之前,我是强烈推荐TypeScript 入门教程这本书的。因为这本书它是:从 JavaScript 程序员的角度总结思考,循序渐进的理解TypeScript。文章来源也是该书,但听我一句话:踩过坑才代表会了。【建议收藏】


希望你看这本书之前已经具备了以下技能:


熟练使用JavaScript开发日常项目

已经听说过TypeScript


一、什么是TypeScript


image.png

1、TypeScript词解

Typed JavaScript at Any Scale。

添加了类型系统的 JavaScript,适用于任何规模的项目。

以上是官网[1]对于 TypeScript 的定义。强调了两个重要特性:

  1. 类型系统
  2. 适用于任何规模

2、TypeScript的特性

1、类型系统

image.png

从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性。


为什么要给JavaScript加上类型呢?


我们知道,JavaScript 是一种轻量级的解释性脚本语言。也是弱类型、动态类型语言,允许隐式转换,只有运行时才能确定变量的类型。正是因为在运行时才能确定变量的类型,JavaScript代码很多错误在运行时才能发现。TypeScript在JavaScript的基础上,包装了类型机制,使其变身成为静态类型语言。在 TypeScript 中,不仅可以轻易复用 JavaScript 的代码、最新特性,还能使用可选的静态类型进行检查报错,使得编写的代码更健壮、更易于维护。


下面是 JavaScript 项目中最常见的十大错误,如果使用 TypeScript,那么在编写阶段就可以发现并解决很多 JavaScript 错误了:

20210925103930938.png

类型系统能够提高代码的质量和可维护性,经过不断的实践,以下两点尤其需要注意:


类型有利于代码的重构,它有利于编译器在编译时而不是运行时捕获错误;

类型是出色的文档形式之一,函数签名是一个定理,而函数体是具体的实现。

TypeScript 是静态类型


类型系统按照「类型检查的时机」来分类,可以分为动态类型和静态类型。


动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。JavaScript 是一门解释型语言,没有编译阶段,所以它是动态类型,以下这段代码在运行时才会报错:

let zhifeiji = 110;
zhifeiji.split(' ');
// Uncaught TypeError: zhifeiji.split is not a function
// 运行时会报错(zhifeiji.split 不是一个函数),造成线上 bug

静态类型是指编译阶段就能确定每个变量的类型(编译时类型检查),这种语言的类型错误往往会导致语法错误。TypeScript 在运行前需要先编译为 JavaScript,而在编译阶段就会进行类型检查,所以 TypeScript 是静态类型,这段 TypeScript 代码在编译阶段就会报错了:

let zhifeiji = 1;
zhifeiji.split(' ');
// Property 'split' does not exist on type 'number'.
// 编译时会报错(数字没有 split 方法),无法通过编译

20210925020321289.png

这段 TypeScript 代码貌似和 JavaScript 没有什么区别。


实际上因为 TypeScript 强大的「类型推论」能力使得大部分 JavaScript 代码都只需要经过少量的修改(或者完全不用修改)就能变成 TypeScript 代码,即使不声明变量 zhifeiji 的类型,也能在变量初始化时自动推论出它是一个 number 类型。如上图没有声明为number却报错了number,足够证明了类型推论。


完整的 TypeScript 代码是这样的:

let zhifeiji : number = 1;
zhifeiji.split(' ');
// Property 'split' does not exist on type 'number'.
// 编译时会报错(数字没有 split 方法),无法通过编译

TypeScript 是弱类型


类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型。


以下这段代码不管是在 JavaScript 中还是在 TypeScript 中都是可以正常运行的,运行时数字 1 会被隐式类型转换为字符串 '1',加号 + 被识别为字符串拼接,所以打印出结果是字符串 '11'。

console.log(1 + '1');
// 打印出字符串 '11'

TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性,所以它们都是弱类型。


作为对比,Python 是强类型,以下代码会在运行时报错:

print(1 + '1')
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

若要修复该错误,需要进行强制类型转换:

1. print(str(1) + '1')
2. # 打印出字符串 '11

JavaScript 和 TypeScript 中不管加号两侧是什么类型,都可以通过隐式类型转换计算出一个结果——而不是报错——所以 JavaScript 和 TypeScript 都是弱类型。


虽然TypeScript是弱类型,但我们可以通过TypeScript提供的类型系统,以及ESLint提供的代码检查功能。使得TypeScript更像是一个「强类型」。


这样的类型系统体现了 TypeScript 的核心设计理念:在完整保留 JavaScript 运行时行为的基础上,通过引入静态类型系统来提高代码的可维护性,减少可能出现的 bug。  

2、适用于任何规模

TypeScript 非常适用于大型项目,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。

在中小型项目中由于有[类型推论],大部分类型都不需要手动声明了,所以不会很大程度的降低开发效率,故部分中小企业也会选择它。


TypeScript 还可以和 JavaScript 共存。如果你是老的JavaScript项目,你想改造成TypeScript的项目,但又代码量太大并且项目要继续更新。那么你可以新的内容和文件用TypeScript,老的不变。当闲下来时,可以逐步将老的一个一个文件的升级为TypeScript。


事实上,就算你从来没学习过 TypeScript,你也可能已经在不知不觉中使用到了 TypeScript——在 VSCode 编辑器中编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript Language Service 实现的:


20210913232211749.png

一些第三方库原生支持了 TypeScript,在使用时就能获得代码补全了,比如 Vue 3.0[8]

20210913232320253.jpg

有一些第三方库原生不支持 TypeScript,但是可以通过安装社区维护的类型声明库[9](比如通过运行 npm install --save-dev @types/react 来安装 React 的类型声明库)来获得代码补全能力——不管是在 JavaScript 项目中还是在 TypeScript 中项目中都是支持的:  

20210913232350687.png

由此可见,TypeScript 的发展已经深入到前端社区的方方面面了,任何规模的项目都或多或少得到了 TypeScript 的支持。




相关文章
|
7月前
|
机器学习/深度学习 人工智能 JavaScript
【JavaScript 与 TypeScript 技术专栏】JavaScript 与 TypeScript 的未来发展趋势
【4月更文挑战第30天】本文探讨了JavaScript和TypeScript的未来发展趋势。JavaScript将聚焦性能优化、跨平台开发、人工智能和WebAssembly的整合。TypeScript则将深化与其他框架的结合,强化类型检查,适应前端工程化,并与WebAssembly融合。两者在Vue 3.0及Web开发中的结合将更加紧密,TypeScript有望在更多领域扩展应用。随着技术进步,JavaScript和TypeScript的结合将成为Web开发的主流趋势。
182 2
|
7月前
|
JavaScript 前端开发 安全
【JavaScript与TypeScript技术专栏】TypeScript如何帮助JavaScript开发者避免常见错误
【4月更文挑战第30天】TypeScript,JavaScript的超集,通过静态类型检查和面向对象特性,帮助开发者避免类型错误、引用错误和逻辑错误,提升代码质量和可维护性。它引入类型注解、接口、可选链和空值合并,使代码更清晰、安全。对于大型项目,TypeScript的接口、类和泛型有助于代码结构化和模块化。学习TypeScript能提高JavaScript开发效率。
56 0
|
7月前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】使用TypeScript优化JavaScript应用性能
【4月更文挑战第30天】本文探讨了如何使用TypeScript优化JavaScript应用性能。TypeScript通过静态类型检查、更好的编译器优化和IDE支持提升代码稳定性和开发效率。利用类型注解、泛型、类与继承以及枚举和常量,开发者能构建高效、灵活和健壮的代码。逐步将TypeScript引入现有JavaScript项目,并通过案例分析展示性能提升效果。随着TypeScript社区的发展,它将在Web开发性能优化中扮演更重要角色。
104 0
|
7月前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。
74 0
|
7月前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】JavaScript与TypeScript混合编程模式探讨
【4月更文挑战第30天】本文探讨了在前端开发中JavaScript与TypeScript的混合编程模式。TypeScript作为JavaScript的超集,提供静态类型检查等增强功能,但完全切换往往不现实。混合模式允许逐步迁移,保持项目稳定性,同时利用TypeScript的优点。通过文件扩展名约定、类型声明文件和逐步迁移策略,团队可以有效结合两者。团队协作与沟通在此模式下至关重要,确保代码质量与项目维护性。
160 0
|
7月前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】TypeScript在JavaScript库与框架开发中的作用
【4月更文挑战第30天】TypeScript,微软开发的JavaScript超集,以其强类型和面向对象特性,正成为提升Web项目质量和效率的关键工具,尤其在库和框架开发中。它通过类型系统减少运行时错误,提供内置文档,便于重构,增强IDE支持,以及支持模块化。流行框架如React、Angular已支持TypeScript,未来有望成为开发高质量库和框架的标准语言。随着社区增长,TypeScript将在Web开发领域扮演更重要角色。
54 0
|
7月前
|
JavaScript 前端开发 开发工具
【JavaScript 与 TypeScript 技术专栏】TypeScript 如何提升 JavaScript 代码的可读性与可维护性
【4月更文挑战第30天】TypeScript 提升 JavaScript 代码的可读性和可维护性,主要通过静态类型系统、增强代码组织、智能提示与错误检测、文档化和在大型项目中的优势。静态类型减少误解,类和接口提供结构,智能提示提高编码效率,类型注解充当内置文档。在大型项目中,TypeScript 降低理解差异,平滑迁移现有 JavaScript 项目,助力提高开发效率和项目质量。
80 0
|
7月前
|
监控 JavaScript 前端开发
【JavaScript与TypeScript技术专栏】TypeScript在JavaScript项目中的渐进式采用
【4月更文挑战第30天】TypeScript是JavaScript的超集,引入静态类型、接口等特性,提升代码安全性和可读性。在JavaScript项目中采用TypeScript可享受类型安全、社区支持及优秀工具集成等优势。渐进式采用策略包括评估项目现状、逐步引入新旧模块、编写类型定义文件、配置编译选项和编写测试用例,以提高项目质量和效率。
71 0
|
7月前
|
JavaScript 前端开发 编译器
【JavaScript与TypeScript技术专栏】从JavaScript迁移到TypeScript的最佳实践
【4月更文挑战第30天】本文介绍了从 JavaScript 迁移到 TypeScript 的最佳实践。首先,学习 TypeScript 基础并安装编译器。接着,采取逐步迁移策略,保持与 JavaScript 兼容,利用类型定义和接口增强代码可读性。此外,借助 TSLint 和 Prettier 保证代码质量与风格一致性,使用类型定义文件提升第三方库的可维护性。
74 0
|
7月前
|
JavaScript 前端开发 安全
【JavaScript 与 TypeScript 技术专栏】JavaScript 与 TypeScript 的对比与选择
【4月更文挑战第30天】本文对比了JavaScript和TypeScript在前端开发中的特点与差异。JavaScript以其灵活性和广泛支持成为Web开发基石,而TypeScript作为其超集,引入静态类型检查和面向对象概念,提升代码质量和开发效率。在项目选择中,考虑规模、团队协作和类型安全需求。两者可结合使用,逐步迁移或互操作,以适应不同场景。开发者应根据实际需求权衡利弊,发挥语言优势。
146 0
下一篇
DataWorks