TypeScript开发
TypeScript 是由 Microsoft 开发和维护的免费开源编程语言。 它是 JavaScript 的严格语法超集,并为该语言添加了可选的静态类型。 它专为开发大型应用程序和转译为 JavaScript 而设计。 由于它是 JavaScript 的超集,现有的 JavaScript 程序也是有效的 TypeScript 程序。
TypeScript 可用于开发用于客户端和服务器端执行的 JavaScript 应用程序(与 Node.js 或 Deno 一样)。 有多个选项可用于转译。 可以使用默认的 TypeScript 编译器, 或调用 Babel 编译器将 TypeScript 转换为 JavaScript。
TypeScript 支持可以包含现有 JavaScript 库类型信息的定义文件,很像 C++ 头文件可以描述现有对象文件的结构。 这使其他程序能够使用文件中定义的值,就好像它们是静态类型的 TypeScript 实体一样。 jQuery、MongoDB 和 D3.js 等流行库都有第三方头文件。 Node.js 库模块的 TypeScript 标头也可用,允许在 TypeScript 中开发 Node.js 程序。
TypeScript 编译器本身用 TypeScript 编写并编译为 JavaScript。 它根据 Apache License 2.0 获得许可。 Anders Hejlsberg 是 C# 的首席架构师,也是 Delphi 和 Turbo Pascal 的创建者,他一直致力于 TypeScript 的开发。
历史
经过两年的 Microsoft 内部开发,TypeScript 于 2012 年 10 月向公众发布了 0.8 版。在最初的公开发布后不久,Miguel de Icaza 称赞了语言本身,但批评了除了当时在 Linux 和 OS X 上不可用的 Microsoft Visual Studio 之外缺乏成熟的 IDE 支持。截至 2021 年 4 月,其他 IDE 和文本编辑器都支持,包括 Emacs、Vim、WebStorm、Atom 和微软自己的 Visual Studio Code。2013 年发布的 TypeScript 0.9 增加了对泛型的支持。
TypeScript 1.0 于 2014 年在微软的 Build 开发者大会上发布。 Visual Studio 2013 Update 2 提供了对 TypeScript 的内置支持。 2014 年 7 月,开发团队宣布了一个新的 TypeScript 编译器,并声称其性能提高了五倍,进一步改进。 同时,最初托管在 CodePlex 上的源代码已移至 GitHub。
2016 年 9 月 22 日,TypeScript 2.0 发布,引入了多项功能,包括程序员可选择强制执行空安全的能力, 有时被称为十亿美元的错误。
TypeScript 3.0 于 2018 年 7 月 30 日发布, 带来了许多语言添加,例如剩余参数和展开表达式中的元组、具有元组类型的剩余参数、通用剩余参数等。
TypeScript 4.0 于 2020 年 8 月 20 日发布。虽然 4.0 没有引入任何重大变化,但它添加了语言特性,例如自定义 JSX 工厂和可变元组类型。
设计
TypeScript 起源于 JavaScript 在 Microsoft 及其外部客户中用于开发大型应用程序的缺点。 [26] 处理复杂 JavaScript 代码的挑战导致了对自定义工具的需求,以简化语言中组件的开发。
TypeScript 开发人员寻求一种不会破坏与标准及其跨平台支持的兼容性的解决方案。 知道当前的 ECMAScript 标准提案承诺未来支持基于类的编程,TypeScript 就基于该提案。 这导致了一个带有一组语法语言扩展的 JavaScript 编译器,一个基于提案的超集,它将扩展转换为常规 JavaScript。 从这个意义上说,TypeScript 的类特性是对 ECMAScript 2015 的预期的预览。提案中没有但添加到 TypeScript 的一个独特方面是可选的静态类型(也称为渐进类型),它支持静态语言分析以促进 工具和 IDE 支持。
ECMAScript 2015 支持
主条目:ECMAScript § 6th Edition - ECMAScript 2015
TypeScript 添加了对 ECMAScript 2015 标准中定义的类、模块和箭头函数语法等功能的支持。
特征
TypeScript 是一种语言扩展,它为 ECMAScript 6 添加了功能。其他功能包括:
- 类型注释和编译时类型检查
- 类型推断
- 类型擦除
- 接口
- 枚举类型
- 泛型
- 命名空间
- 元组
- 异步/等待
以下功能是从 ECMAScript 2015 向后移植的:
- 类
- 模块
- 匿名函数的缩写“箭头”语法
- 可选参数和默认参数
在句法上,TypeScript 与 JScript .NET 非常相似,后者是 ECMA-262 语言标准的另一种 Microsoft 实现,它增加了对静态类型和经典的面向对象语言功能(如类、继承、接口和命名空间)的支持。
与 JavaScript 的兼容性
TypeScript 是 ECMAScript 2015 的严格超集,ECMAScript 2015 本身是 ECMAScript 5 的超集,通常称为 JavaScript。 因此,JavaScript 程序也是有效的 TypeScript 程序,并且 TypeScript 程序可以无缝地使用 JavaScript。 默认情况下,编译器以当前流行的标准 ECMAScript 5 为目标,但也能够生成 ECMAScript 3 或 2015 中使用的结构。
使用 TypeScript,可以使用现有的 JavaScript 代码,合并流行的 JavaScript 库,并从其他 JavaScript 调用 TypeScript 生成的代码。 [30] 这些库的类型声明随源代码一起提供。
类型注解
TypeScript 通过类型注释提供静态类型,以在编译时启用类型检查。 这是可选的,可以忽略以使用 JavaScript 的常规动态类型。
function add(left: number, right: number): number { return left + right; }
基本类型的注释是数字、布尔值和字符串。 Typescript 还支持具有以下注释的数据类型 Array、Enums、void。
其他数据类型有:Tuple、Union、never 和 any。 在每个索引处具有预定义数据类型的数组是元组类型。 保存不止一种类型数据的变量是 Union 类型。 当您确定某事永远不会发生时,您可以使用 never type。 弱类型或动态类型的结构是任何类型。
可以将类型注释导出到单独的声明文件,以便使用已编译到 JavaScript 中的类型为 TypeScript 脚本提供类型信息。 可以为现有的 JavaScript 库声明注释,就像对 Node.js 和 jQuery 所做的那样。
TypeScript 编译器在未给出类型时使用类型推断来推断类型。 例如,即使没有提供返回类型注释,上面代码中的 add 方法也会被推断为返回一个数字。 这是基于 left 和 right 的静态类型是数字,并且编译器知道两个数字相加的结果始终是一个数字。 但是,显式声明返回类型允许编译器验证正确性。
如果由于缺少声明而无法推断出任何类型,则它默认为动态任意类型。 any 类型的值支持与 JavaScript 中的值相同的操作,并且对任何值的操作执行最少的静态类型检查。
声明文件
编译 TypeScript 脚本时,可以选择生成一个声明文件(扩展名为 .d.ts),该文件用作已编译 JavaScript 中组件的接口。 在此过程中,编译器剥离所有函数和方法体,仅保留导出类型的签名。 当第三方开发人员从 TypeScript 使用它时,生成的声明文件可用于描述 JavaScript 库或模块的导出虚拟 TypeScript 类型。
声明文件的概念类似于 C/C++ 中的头文件的概念。
declare namespace arithmetics { add(left: number, right: number): number; subtract(left: number, right: number): number; multiply(left: number, right: number): number; divide(left: number, right: number): number; }
可以为现有的 JavaScript 库手动编写类型声明文件,就像 jQuery 和 Node.js 所做的那样。
流行 JavaScript 库的大量声明文件托管在 GitHub 上的 DefinitelyTyped 中。
类
TypeScript 支持集成可选类型注释支持的 ECMAScript 2015 类。
class Person { private name: string; private age: number; private salary: number; constructor(name: string, age: number, salary: number) { this.name = name; this.age = age; this.salary = salary; } toString(): string { return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4 } }
泛型
TypeScript 支持泛型编程。下面是身份函数的一个例子。 [34]
function id<T>(x: T): T { return x; }
联盟类型
本节摘自 Union type § TypeScript。[编辑]
TypeScript 支持联合类型。 这些值被语言隐式地“标记”为类型,并且可以通过“typeof()”检索。
function successor(n: number | bigint): number | bigint { return ++n }
模块和命名空间
TypeScript 区分模块和命名空间。 TypeScript 中的两个特性都支持将类、接口、函数和变量封装到容器中。 命名空间(以前称为内部模块)利用 JavaScript 的立即调用函数表达式来封装代码,而模块(以前称为外部模块)利用 JavaScript 库模式(AMD 或 CommonJS)来封装代码。
开发工具
编译器
名为 tsc 的 TypeScript 编译器是用 TypeScript 编写的。 因此,它可以被编译成常规的 JavaScript,然后可以在任何 JavaScript 引擎(例如浏览器)中执行。 编译器包捆绑了一个可以执行编译器的脚本宿主。 它也可以作为使用 Node.js 作为主机的 Node.js 包使用。
当前版本的编译器默认支持 ECMAScript 5。 允许一个选项以 ECMAScript 2015 为目标,以使用该版本独有的语言功能(例如生成器)。 尽管类是 ECMAScript 2015 标准的一部分,但在两种模式下都可用。
IDE 和编辑器支持
- Microsoft 为 Visual Studio 2012 和 WebMatrix 提供插件,在 Visual Studio 2013、Visual Studio 2015 中提供全面集成支持,并为 Emacs 和 Vim 提供基本的文本编辑器支持。
- Visual Studio Code 是微软基于 Electron 开发的(大部分)开源、跨平台的源代码编辑器。 除了其他几种语言外,它还支持 TypeScript,并提供调试和智能代码完成等功能。
- alm.tools 是一个用于 TypeScript 的开源云 IDE,使用 TypeScript、ReactJS 和 TypeStyle 构建。
- JetBrains 在其基于 IntelliJ 平台构建的 IDE(例如 PhpStorm 6、WebStorm 6 和 IntelliJ IDEA)及其 Visual Studio 插件和扩展 ReSharper 8.1中通过代码完成、重构和调试支持 TypeScript。 ]
- Atom 有一个 TypeScript 插件,支持代码完成、导航、格式化和快速编译。
- 在线 Cloud9 IDE 和 Codenvy 支持 TypeScript。
- NetBeans IDE 有一个插件可用。
- 一个插件可用于 Eclipse IDE(Kepler 版本)
- TypEcs 可用于 Eclipse IDE。
- 跨平台云 IDE Codeanywhere 支持 TypeScript。
- Webclipse 一个 Eclipse 插件,旨在开发 TypeScript 和 Angular 2。
- Angular IDE 一个独立的 IDE,可通过 npm 用于开发 TypeScript 和 Angular 2 应用程序,具有集成的终端支持。
- Tide – Emacs 的 TypeScript 交互式开发环境。
与构建自动化工具集成
使用插件,TypeScript 可以与构建自动化工具集成,包括 Grunt (grunt-ts)、Apache Maven (TypeScript Maven Plugin)、Gulp (gulp-typescript) 和 Gradle (TypeScript Gradle 插件 )。
linting 工具
TSLint扫描 TypeScript 代码是否符合一组标准和指南。 ESLint 是一种标准的 JavaScript linter,它还通过社区插件为 TypeScript 提供了一些支持。 然而,ESLint 无法利用 TypeScript 的语言服务,因此排除了某些形式的语义检查和程序范围的分析。2019 年初,TSLint 团队宣布弃用 linter,转而使用 typescript-eslint,这是 TSLint、ESLint 和 TypeScript 团队的共同努力,旨在将 linting 整合到 ESLint 保护伞下,以提高性能、社区团结和开发人员可访问性。
- 53 次浏览
【NestJS 】NestJS 及其对后端开发人员的优势
NestJS 是一个框架,用于构建高效且可扩展的 Node.js 服务器端应用程序,该应用程序由 TypeScript 构建并完全支持。它使用强大的 HTTP 服务器框架,如 Express 或 Fastify。 Nest 在常见的 Node.js 框架之上提供了一个抽象级别,并将其 API 公开给开发人员。这为使用第三方模块提供了很大的自由。
选择 NestJS 而不是 ExpressJS(最流行的 Node.js 框架之一)的一个很好的理由是,当 Node.js 中的一个新项目启动时,它是一个基于几个简单组件(控制器、模块和提供程序)的清晰架构)。这很容易将应用程序拆分为微服务。
您想知道为什么选择 NestJS 作为您的后端框架吗?继续阅读。
什么是 NestJS?
如前所述,NestJS 是一个开源、可扩展、通用、渐进的 Node.js 框架,用于创建引人注目且要求苛刻的后端系统。它是目前 TypeScript 中增长最快的 Node.js 框架。
NestJS 用于编写可扩展、可测试和松耦合的应用程序。它将可扩展的 Node.js 服务器提升到了一个全新的水平。它支持 PostgreSQL、MongoDB、MySQL 等数据库。 NestJS 深受 Angular、React 和 Vue 的影响,并提供开箱即用的依赖注入。
截至 2022 年 1 月,它拥有超过 44k 的 GitHub 星,其每周 npm 下载率接近 180k。它鼓励开发人员尝试、学习和使用一些著名的软件开发范例,其文档包含大量示例、配方和代码源。
NestJS 易于扩展,因为它可以与其他库一起使用;由于其自适应的成熟生态系统和渐进式,带来了 JavaScript 功能和设计模式,因此具有多功能性。
NestJS 的构建块
- 模块:用于组织代码并将功能拆分为逻辑可重用单元。分组的 TypeScript 文件用“@Module”装饰器装饰,它提供了 Nest 用来组织应用程序结构的元数据。
- 提供者:也称为服务,旨在抽象任何形式的复杂性和逻辑。可以创建提供程序并将其注入控制器或其他提供程序。
- 控制器:负责处理传入的请求并将适当的响应返回到应用程序的客户端(例如对 API 的调用)。
NestJS 令人难以置信的功能
最近,NestJS 框架因其令人难以置信的特性而获得了极大的欢迎。他们之中有一些是:
- 它利用 TypeScript——强类型语言,它是 JavaScript 的超集
- 易于使用、学习和掌握
- 强大的命令行界面 (CLI) 可提高生产力并简化开发
- 详细且维护良好的文档
- 主动代码库开发和维护
- 它是开源的(MIT 许可证)
- 支持数十个特定于Nest的模块,可帮助您轻松与 TypeORM、Mongoose、GraphQL、日志记录、验证、缓存、WebSockets 等常见技术和概念集成
- 简单的单元测试应用程序
- 为单体和微服务创建(文档中有关 NestJS 应用程序的微服务类型以及技术和配方的完整部分
为什么选择 NestJS
Java 作为一种编程语言已有 20 多年的历史。多年来,它是创建业务应用程序的主要框架,但最近,焦点转移到了 Node.js。由于它的速度,Node.js 席卷了开发人员世界,让他们可以享受 JavaScript 的所有好处,并用相同的编程语言编写前端和后端。由于 NestJS 是 Node.js 中增长最快的框架,让我们谈谈为什么选择 NestJS 而不是您当前的框架的原因?
- 快速高效的开发过程。
- 高度可扩展且易于维护的应用程序。
- 过去 3 年来增长最快的 Node.js 框架。
- 大型社区和支持系统。
- Nest 将自己定位在前端和中端开发的独特十字路口,这是许多语言难以找到的。
- TypeScript 的使用有助于确保 Nest 在快速变化的 JavaScript 环境中保持相关性,并为开发人员提供更少的上下文切换。
- 很棒的文档。
- 简单的单元测试。
- 专为大型企业应用程序而构建。
- Nest 提供了一个开箱即用的应用程序架构,允许开发人员和团队创建高度可测试、可扩展、松散耦合和易于维护的应用程序。
- 使用 NestJS,您可以构建 Rest API、MVC 应用程序、微服务、GraphQL 应用程序、Web Sockets 或 CLI 和 CRON 作业。
- 它使用最好的 Node.js、TypeScript 和防弹架构模式。
- Nest 中的应用程序结构很大程度上基于 Angular。结构非常简单,可以更多地关注端点及其消费者的设计,而不是应用程序结构。
- NestJS 通过引入类似 Angular 的模块、服务和控制器来强制开发人员使用特定架构,确保应用程序具有可扩展性、高度可测试性和松散耦合,这与其他 Node.js 框架(如 Express 或 Koa)相反关于架构的项目可能会花费很多时间来重构代码库。
原文:https://blog.devgenius.io/nestjs-and-its-advantages-for-backend-develop…
- 459 次浏览