与领导团队的工程师讨论TypeScript

发布于:2020-12-24 16:12:36

0

68

0

TypeScript 前端 JavaScript

在2020年开发者调查结果中,最受关注的统计数据之一是最受欢迎的语言。正如几年来一样,Rust是第一名。但是排在第二位的是TypeScript,这是JavaScript的一种强类型超集,略微胜过Python。我们想了解TypeScript为何如此受欢迎,因此我们联系了Microsoft TypeScript语言的主要工程负责人Ryan Cavanaugh。他足够慷慨地坐下来回答我们的问题。事不宜迟,以下是我们的对话,为清晰起见,我们对其进行了轻松编辑。

问:您在TypeScript团队工作了多久了?

答:我是在2012年2月首次发布TypeScript团队大约六个月之前就加入这个团队的。所以,我已经从事了大约八年的时间。

问:有趣,所以很接近开始。您还记得为什么团队想出TypeScript,为什么要发布类似的东西吗?

答:当我加入团队时,Microsoft的很多人都想以我们所谓的“应用程序规模”开发JavaScript。 TFS和Office等团队希望构建大型JavaScript应用程序。这些人中的许多人都熟悉静态类型的语言,例如C ++,C#,Java等。他们希望使静态类型可用于概念可伸缩性和工具。

微软的语言专家研究了这种情况,并说,很好,我们可以尝试像人们以前一样编写一种新的语言。有像Script#这样的项目,它使用C Sharp并将其转换为JavaScript,或者像CoffeeScript这样的语言,如果JavaScript具有不同的语法该怎么办?但是他们决定只是采用JavaScript并在其上添加静态类型。

当时,JavaScript经历了增长的复兴,在相当长的时间内,他们第一次在语言中再次添加了功能。人们想使用这些很酷的新功能,例如箭头功能和类,并且他们不想等待所有浏览器都采用它们。他们希望能够立即使用这些功能。我认为这是TypeScript预先提供的三件事:用于查找错误的静态类型,利用该静态类型信息进行工具开发以及提供今天明天的JavaScript功能。

问:您是否发现收养点没有回报?人们会遇到什么东西吗,哦,是的,我们现在正在使用TypeScript?

答:哦,绝对是Google宣布他们将在Angular中使用TypeScript。现在有点浪费时间了。但是,如果您查看TypeScript的图形,则实际上任何图形(GitHub星图,下载,拉取请求)都可以看到Angular公告发布的确切时间。图就改变了。它永远不会回头。您再也看不到曲线上的小弯,因为曲线一直在前进。那是一个真正的拐点。而且我认为有趣的是,当时人们认为TypeScript只是Angular人们使用的东西,而没有太多其他用途。事实并非如此。显然,我们在Angular开发人员中仍然很受欢迎。但这对我们来说是一个真正的动力建设者。

问:在我们最近的开发者调查中,TypeScript是排名第二高的最受欢迎的语言。您为什么认为人们如此喜欢它?

嗯?因为太好了!

问:我认为我们需要一个可以客观辩护的答案。

答:从根本上讲,JavaScript作为一种语言而受到了不好的说唱,但是使用它确实很有趣。它有时使您变得更有活力,有时使您变得更有目的地。这只是一种很棒的功能语言。但是缺少静态类型检查确实会限制人们编写可以确信在运行之前可以正常工作的东西的能力。

TypeScript支持JavaScript的最后一个粗略优势,并为您提供了真正有趣的操作并且可以在任何地方运行。我认为,如果TypeScript是基于一种不太通用的语言或一种不太有趣的语言构建的语言,那么我认为它不会那么成功。确实取得了很大的进步,并使它变得更好。

问:似乎静态键入现在有点片刻。我已经看到了很多关于赞赏Rust中的鸭子输入和Python中的提示的评论。您为什么认为静态输入现在如此流行?

答:我认为是因为人们试图在没有大型应用程序的情况下构建大型应用程序,并看到它有多痛苦。我的意思是,Facebook上的Hack也在发生同样的事情,他们在PHP中添加类型。因此,我认为人们已经意识到,您可以很容易地编写一个没有静态类型的小程序,但是您很快就会遇到一个门槛,如果没有它,事情就会变得太痛苦了。当您尝试维护它们并猜测键入内容时,很难推理。

我认为我最喜欢的事情是互联网上的人们在说:‘我在TypeScript中进行了巨大的重构,重构了三个小时。然后我运行我的代码,它第一次起作用了。’使用动态语言,这将永远不会发生。当类型检查器说您完成时,有一个非常令人满意的元素要完成。那可能只有百分之八十五的准确率。但这比零好得多。这是一种更好的开发方式,尤其是在这样的大型重构过程中。

问:我见过一些反对静态打字的人。您是否认为可以进行动态键入?

答:我是这样认为的。我的意思是,那里的编程世界很大。我不认为您不喜欢静态类型是不对的。我认为这是个人喜好。当然,有些程序会妨碍您进行静态类型输入。这对我们来说很重要;我们还提供了JavaScript工具,但我们仍然认为JavaScript是一种完全有效的开发方式。我只想对人们说,如果静态类型不适合您,那么对于您的编程风格或您正在处理的问题,只需跳过它即可。没关系。没关系。我不会生气。如果有人可以得到三万行的应用程序而无需使用静态类型就可以完成工作,那么我会印象深刻。这似乎真的很困难。但是对那些使它起作用的人表示敬意。

Python也是如此。很少有人能使用Python类型注释,但是Python非常受欢迎。我认为数据是不言而喻的—我认为Python在调查中排名第三(编者注:是,但仅次于头发)。我向您保证,这些Python开发人员中只有很小一部分具有静态类型。无论您的问题领域是什么,这都可能是最适合您的。

问:我知道我们即将迎来Java 25周年。 JavaScript也已经存在了一段时间。现在,是TypeScript。从过去的离线工作到网络工作再到移动工作,过去十年来我们看到的趋势是什么,这些趋势使JavaScript和现在的TypeScript成为理想的工具?

这是您是否要调试或加载引用.js文件的生产HTML的问题。在此过程中,我们实际上在哪里获取.ts文件?永不说永不。但是对我来说,这是一种不久的将来。 Deno完全是自己的事情,因为它有一个新的运行时。因此,这种情况对我来说更有意义,至少是在您第一次运行脚本时进行类型检查,并确保您具有一些兼容的环境。

问:Microsoft团队现在的状态是什么?自您加入以来,它增长了多少?它有多大?

答:在我们一直致力于这一工作的整个过程中,我们有四到八名核心编译器工程师,一到两个PM,以及四到零的专用测试人员。这一直很稳定。最近,我们有意识地扩大了团队。

过去,我们有一个核心的编译器团队,然后有另一个团队在Visual Studio方面工作,因为集成到像Visual Studio这样的大型产品中确实需要大量工作。但是VS方面的一些体系结构改进释放了那里的一些工程师力量。因此,我们正在召集该团队来帮助我们进行重构和“转到定义”之类的工作。总体上团队规模相同,除了现在我们将有更多的人在GitHub回购中看到的核心编译器服务上工作。

问:您能否给我一些关于Microsoft之外的观点,您在哪里看到有人帮助您以不同的方式构建它?我们讨论了Deno及其对TypeScript的作用。您在哪里看到其他人在帮助建立这个生态系统?

我们完全依赖生态系统来制造在集成环境中工作的产品。因此,无论是webpack还是ts-loader之类的插件,还是我们如何使用汇总或Parcel,还是…为捆绑程序命名,对不对?这一切都非常复杂。

我们的人员配备不足以让我们完全拥有这种经验。而且我们不想。社区应该推动将TypeScript纳入更大的构建过程以及整个更大的生态系统的方式。随着JavaScript构建管道的扩展和变得越来越复杂,我们看到人们在加紧并提供该功能。这可能是TypeScript和`create-react-app`,或者是TypeScript如何与Vue集成。我们只想确保自己正在构建仅知道如何构建的东西,然后帮助其他人获得只有他们知道如何构建的东西。几个里程碑之前,我们专门与ts-loader人员合作,以期获得良好的项目参考实现。

JavaScript生态系统中的事物数量在不断增长。我们只是希望扩大社区以在所有这些情况下支持TypeScript,而不是扩大团队。我们还一直在研究如何更聪明地将外部贡献纳入TypeScript。我们看到的主要挑战是,向TypeScript代码库添加功能实际上很容易,而修复错误则非常困难。人们添加功能比修复bug更加兴奋,因为它很有趣。谁能责怪他们?弄清楚我们能做些什么,并鼓励人们在我们需要更多帮助的事情上帮助我们,这将是社区的挑战。我不会出去说我需要免费工作。人们可以使用这里提供的任何东西来开源。那很棒。但这是我愿意做得更多的事情。