写点什么

Slack 从 JavaScript 切换至 TypeScript

  • 2017-04-23
  • 本文字数:1385 字

    阅读完需:约 5 分钟

Slack 桌面端工程师 Felix Rieseberg撰文介绍了 Slack 从 JavaScript 切换至 TypeScript 充满挑战,但也获得了巨大收益的过程。

为了简化大型 JavaScript 代码库的管理工作,在放弃使用 JSDoc 进行函数签名的记录,以及相关用途的描述后,Slack 团队决定切换至 TypeScript。Rieseberg 专门提到,对于现有代码库,很难应用 JSON 的方法,因为这需要对代码的修改制定严格的约束,但实际上通常可能根本无法轻松地了解预期的类型到底是什么,例如一个 Ppromise 所要解决的到底是什么问题。

Slack 团队选择 TypeScript 的原因之一在于,TypeScript 是 JavaScript 的超集,因此无须更改现有代码即可使用,并能在采用后逐渐启用其代码分析功能,包括很多流行的软件包中提供类型定义。随着时间的流逝,他们稍后还可以启用高级编译器选项,例如 --noImplicitAny,借此防止编译器就any类型进行推断。Rieseberg 说他们花了大约六个月的时间为大部分桌面应用的代码添加注解,在这个过程中,编译器发现了很多 Bug,并且他们通过诸如自动补全等高级编辑功能大幅加快了开发速度。

InfoQ 就这一过程采访了 Rieseberg。

您提到才用了循序渐进的方法来启用 TypeScript 的编译器选项。能否详细说说哪些选项可以在一开始就启用,哪些选项需要在对原有代码进行更多调整之后才能启用?

我认为,any类型是将我们的代码库迁移至 TypeScript 最强有力的理由之一。该类型可以让我们循序渐进地将any声明稳步替换为更具体的类型和接口。随着使用类型数量的增加,我们迟早会从这种交类型与并类型所提供的抽象中获益,而这些问题原本是新接触类型系统的开发者最头疼的。在我个人看来,循序渐进地采用 TypeScript,这种方法的可行性主要源自它可以接纳现有的 JavaScript。TypeScript 会试图理解你的代码,并尽可能为你的开发工作提供支持,但就算你没时间将自己的整个代码库一次性移植完成,TypeScript 也能让人受益匪浅。

从一种动态的类型切换至一种严格类型的语言,通常可以借机重新设计某些东西。Slack 遇到过这种情况吗?

我们向着 TypeScript 的转换主要是由开发者 OJ Kwon 负责的,他在加入团队后很快就开始进行了。他发现这一过程中有很多机会可以让我们完善现有代码库。尤其是移植到 TypeScript 的过程可以帮助我们更好地理解架构内部的数据流动,但从更大范围来说,回顾现有代码始终是一种重新思考所采取的具体方法的好机会。

从语言的层面上来说,TypeScript 的哪些功能对于你们构建表达式类型系统最有帮助?

我最喜欢声明合并(Declaration merging),这个功能可以让我们重用现有类型和声明,借此表达我们所要实现的目标。此外虽然关注度略低,但我们的代码库中还大量用到了字符串字面量(String literal)类型。

您刚才强调说,TypeScript 最大的优势之一在于它是 JavaScript 的超集。从另一方面来看,这也意味着无法完全确信你从应用的纯 JavaScript 层所获得的任何东西。对此您是怎么看的?这是否会造成什么问题?

有必要指出一点,围绕 TypeScript 还有一个名为 Salsa 的项目,这是一种开发服务器,可以在使用 JavaScript 时提供类似于 TypeScript 的体验。正是该项目的引擎帮助 Visual Studio Code 理解 JavaScript。开发过程中我们配合使用了 TypeScript、声明文件,以及 Salsa,结果还不错。我个人很喜欢 TypeScript 对声明文件的处理方法。

阅读英文原文 Moving from JavaScript to TypeScript at Slack

2017-04-23 19:002394
用户头像

发布了 283 篇内容, 共 109.3 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

龙蜥实验室来了!收下这份指南,秒级体验 Anolis OS

OpenAnolis小助手

国产操作系统 龙蜥社区

AI开发平台系列1:AI开发平台“家族”概览

Baihai IDP

人工智能 ide AI 平台

多IOT设备上跑物联网应用,你也可以

Speedoooo

物联网 IoT ios开发 Andriod开发

应急响应-Yara规则木马检测

H

网络安全 应急响应

一周信创舆情观察(2021.12.27~2022.1.3)

统小信uos

Linux之find命令的参数详解

CRMEB

云计算厂商们,你们辜负了中国的用户

观测观测

云原生 云计算架构师

新思科技:2022年软件安全行业七大趋势预测

InfoQ_434670063458

新思科技 2022 安全趋势

中国电信发布运营商行业首个云原生关系型数据库TeleDB for openGauss

openGauss

恒源云(GPUSHARE)_字节跳动的mRASP预训练模型真香

恒源云

字节跳动 机器翻译 语音识别

openGauss Summit 2021你想知道的都在这!

openGauss

LabVIEW图像模式匹配(基础篇—11)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 图像模式匹配

一篇从购买服务器到部署博客代码的详细教程

冴羽

nginx 前端 后端 博客 博客搭建

从GitHub 到极狐GitLab 的迁移指南

极狐GitLab

GitHub 极狐GitLab 迁移指南

深入理解虚拟化

极客重生

云计算 容器 虚拟机 调度 资源隔离

数字人民币app公开上架应用市场 试点区域外用户暂无法使用

CECBC

分享一个小故事

石云升

故事 1月月更

技术干货 | WebRTC 技术解析之 Android VDM

网易云信

Java android 音视频 VDM

openGauss 2021 感谢有您,一起创造了那些灿烂记忆

openGauss

廖湘科:数据库需要充分利用开源和发展开源,广泛吸纳全产业力量

openGauss

技术说|拓维·建木边缘计算平台,让算力先行一步

拓维信息

云计算 大数据 边缘计算

开源demo| anyRTC 互动白板发布,助力实时互动场景

anyRTC开发者

音视频 在线教育 视频会议 智慧协同 开源demo

双碳绿色风中,乘势而起了哪些新能源?

脑极体

中国联通联合openGauss开源社区启动数据库自主创新

openGauss

小声嘟囔:char 和 unsigned char 有那么大差距吗?

BUG侦探

c ios 汇编 ios开发

共话数据库技术与行业数字化融合创新,探讨开源数据库未来发展

openGauss

青藤:省心又省钱!安全运营服务正在成为甲方企业的主流选择

青藤云安全

openGauss数据库源码解析系列文章——存储引擎源码解析(一)

openGauss

加密货币、去中心化金融和交易的演变:一种交易成本方法

CECBC

05 Prometheus之监控主机和容器

穿过生命散发芬芳

Prometheus 1月月更

神州新桥正式加入openGauss社区

openGauss

Slack从JavaScript切换至TypeScript_JavaScript_Sergio De Simone_InfoQ精选文章