简介我已经做了很多年的JavaScript开发人员,我并没有太多打算跳出我的技术堆栈。我告诉自己,坚持你已经知道的东西并试图学习太多的编程语言可能会让人望而生畏。JavaScript学习起来已经相当耗时,而且没有人真正掌握它,因为随着语言的发展,API会随着文档不断更新。还有很多框架和库需要学习。这是一个过时的想法,幸运的是我在找工作时看到了曙光。公司正在寻找通晓多种语言的开发人员,这实际上意味着知道并能够使用多种编程语言的人。扩展你的知识那时我意识到JavaScript是不够的,如果你真的想脱颖而出,那么你需要能够使用不同的编程语言。所以当时我就决定学习TypeScript和Python。具有讽刺意味的是,我实际上找到了一份工作,但公司只要求我使用JavaScript,所以不幸的是,我忘记了大部分我学过的TypeScript和Python,因为我不是每天都使用它。所有这些都是在我活跃在技术推特上并开始写博客之前,所以我真的不明白在公共场合构建和从事业余项目的概念。我的理由是我已经有工作了,所以我也不需要在周末编程。在大流行期间找工作快进到2021年,一切都变了。在这场全球大流行病中,我们现在正处于与Covid共存的第二年。我花了大约6个月的时间才得到一份体面的工作机会,从那以后我就一直在这家公司工作。在此期间,我参与了使用Python和Kotlin后端的项目。所以我接触了不同的语言。JavaScript仍然是世界上最流行的编程语言之一,并且将始终处于高需求状态。它在Stackoverflow2021调查中名列前茅,而TypeScript排在第7位。那么,如果JavaScript在全世界如此流行和受追捧,为什么还要学习TypeScript?为什么要学习TypeScript尽管JavaScript非常好,但与其他现代编程语言相比,该语言仍然存在许多缺陷。不幸的是,有很多人出于各种原因根本不喜欢JavaScript。TypeScript基本上是一种开发JavaScript项目的现代方式,并且该语言会编译为原始JavaScript,因此您的代码库仍然可以被浏览器和其他可能不了解TypeScript的开发人员阅读。老实说,语法是JavaScript,所以即使你不熟悉TypeScript,你仍然可以理解是怎么回事。TypeScript旨在解决JavaScript中存在的许多问题,从而使该语言更接近于其他现代编程语言。在我看来,任何讨厌JavaScript的人都可能会喜欢TypeScript。或者至少找到更少的理由抱怨它。JavaScript和TypeScript之间存在许多差异,我将在此处介绍其中的一些差异。编译错误TypeScript能够在开发过程中标记编译时错误。这是一个非常好的特性,因为这意味着当您的应用程序构建并运行时,您不太可能在运行时出错。JavaScript只能在运行时看到这些错误,因此您的调试速度可能会变慢,因为您现在正在做更多不必要的检查。TypeScript中可用的更好工具可在编写代码时提供更好的体验。静态类型与动态类型JavaScript使用动态类型,而TypeScript使用静态类型。使用动态类型,您可以重新分配变量,因为数据类型可以改变。这对于静态类型是不可能的,因为定义数据类型意味着如果您尝试分配不同的数据类型,它将显示编译错误。每种方法都有优点和缺点。//这是有效的JavaScriptcodeletnum=10;num="10";//你会收到错误类型'string'isnotassignabletotype'number'.letnum:number=10;num="10";使用接口来描述你的数据TypeScript可以在你的代码中使用一个接口来描述你的应用程序中对象的结构。它定义了对象所需的整体语法,因此您可以将其用于代码编辑器中的文档和问题跟踪。值得注意的是,TypeScript编译器不会将接口语法转换为JavaScript。它仅用于类型检查,也称为“鸭子类型”或“结构子类型”。//在你的代码中描述对象的形状。interfaceSeries{id:number;seriesName:string;releaseDate:number;}//在你的object.constseries中使用接口进行类型检查:Series={//id需要是一个数字id:1,//系列名称需要是一个字符串seriesName:'TheBookofBobaFett',//发布数据需要是一个数字releaseDate:2021,};console.log(series);CommonJS模块对于ES模块,Node.js默认使用CommonJS模块,任何熟悉它的人都会知道require语法。相反,当您将Node.js与TypeScript结合使用时,您可以选择使用requireorimport和export语句。当然,如果您进行研究,也有办法让它在原生JavaScript中工作。JavaScriptCommonJS模块constexpress=require('express');TypeScriptES模块从'express'导入express;使用TypeScript时,您可以访问tsconfig.json文件,该文件允许您更改许多设置,包括目标。这使得您可以为输出的JavaScript文件设置JavaScript语言版本。例如,它们可能是ES2015、ES2016、ES2017等...TypeScript缺点TypeScript很棒,但它确实有一些您应该注意的缺点。首先,TypeScript不能在浏览器中运行,因此您必须先将代码编译为JavaScript,然后才能使用它。幸运的是TypeScript有一个编译器,所以当你设置它时,它会自动将你的TypeScript文件编译成JavaScript,幸运的是这是一个快速的过程。因此,您不必担心必须等待几分钟才能编译代码,这通常会在几秒钟内发生。另一个缺点是您将编写更多代码,特别是如果您需要静态类型检查。不过,我不认为这是一个缺点,因为您正在编写性能更高、更好的代码,这将使它更容易维护。另一件你需要知道的事情是,除了你使用的一些正常的包之外,你还需要一些类型声明的包。类型声明包描述内置对象。声明文件为您提供了一种声明类型或值的方法,因此无需为这些值提供任何类型的实现。情况并非总是如此,因为一些包已经有类型定义,但不是全部。在下面的这个ExpressNode.js示例中更容易理解。JavaScriptExpressappnpmiexpressconstexpress=require('express');constapp=express();app.get('/',(req,res)=>{res.send('HomeRoute');});constport=process.env.PORT||3000;app.listen(port,()=>console.log(`服务器运行在端口${port},http://localhost:${port}`));TypeScriptExpress应用npmiexpress@types/express@types/nodeimportexpress,{Response,Request}from'express';constapp=express();app.get('/',(req:Request,res:Response)=>{res.send('HomeRoute');});constport=process.env.PORT||3000;app.listen(port,()=>console.log(`服务器运行在端口${port},http://localhost:${port}`));TypeScript支持TypeScript得到很好的支持,如果您选择的代码编辑器是VisualStudioCode,那么TypeScript被认为是一等公民,因为Microsoft开发了代码编辑器和语言。几乎所有流行的JavaScript框架都支持TypeScript。这包括React、Angular、Vue和Svelte。框架express.js也像其他Node.js框架一样兼容TypeScript。因此,没有什么能阻止您在应用程序的前端和后端使用TypeScript。另一个优点是您现在可以在后端和前端原生使用ES模块。因此,例如,如果您正在创建一个带有Node后端和React前端的应用程序。您现在可以对两者都使用import和export语句,并且不再需要使用CommonJS模块require语句。如何学习TypeScript我从Scrimba学习了TypeScript,也在Udemy上学习了另一个很好的TypeScript课程。如果您已经了解JavaScript,您很快就会熟悉TypeScript。此外,如果您是JavaScript的新手或仍在学习基础知识,最好等到您对它有了更多的经验后再学习TypeScript。
