写点什么

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:002489
用户头像

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

关注

评论

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

升级过log4j,却还没搞懂log4j漏洞的本质?

华为云开发者联盟

Java log4j 漏洞 JNDI rmi

【MongoDB学习笔记】-使用 MongoDB 进行 CRUD 操作(上)

恒生LIGHT云社区

数据库 mongodb

从Hadoop框架讨论大数据生态

编程江湖

大数据 hadoop

视频通信中的码率控制算法

拍乐云Pano

音视频 RTC 视频编码 码率控制

【等保小知识】等保一级需要测评吗?

行云管家

网络安全 等保 等级保护 等保一级

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」RocketMQ消息发送的全部流程和落盘原理分析

码界西柚

RocketMQ 消息队列 Apache RocketMQ 12月日更

(转)大数据开发之Hive中UDTF函数

@零度

大数据 hive

给弟弟的信第19封|年轻人要注意养生

大菠萝

28天写作

Linux云计算好学吗?Linux云计算运维学习资料,手把手教你学 条件测试语句和流程控制语句的使用

学神来啦

Linux centos Shell if linux云计算

安全漏洞之任意文件上传漏洞分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

CRM系统如何帮助企业改变销售周期

低代码小观

程序员 销售管理 销售 CRM CRM系统

在线JSON转Csharp工具

入门小站

工具

熟悉又陌生的白帽黑客组织OWASP

喀拉峻

黑客 网络安全 安全 OWASP

如何跟踪log4j漏洞原理及发现绕WAF的tips

H

网络安全 漏洞

2021数据技术嘉年华 | OceanBase 技术盛宴ON LINE ,我们不见不散!

OceanBase 数据库

数据库 OceanBase 社区版 技术嘉年华 DTC

实用机器学习笔记二十:偏差和方差

打工人!

机器学习 深度学习 算法 学习笔记 12月日更

30个类手写Spring核心原理之自定义ORM(下)(7)

Tom弹架构

Java spring 源码

「Oracle」数据库字符集编码修改

恒生LIGHT云社区

数据库 oracle

30个类手写Spring核心原理之动态数据源切换(8)

Tom弹架构

Java spring 源码

波卡生态的去中心化存储Crust Network | Hoo虎符研究院

区块链前沿News

波卡生态挖矿 Hoo虎符 虎符交易所 虎符研究院 去中心化存储

2021低代码平台推荐,每一个都具有10年行业开发经验!

J2PaaS低代码平台

低代码 低代码开发 低代码开发平台 地代码平台

语音信号处理 4:汉语中语音的分类及韵律特性

轻口味

28天写作 12月日更

酷炫3D效果在瘦设备上也能实现?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

6000 字干货详解:直播聊天室的无限用户优化

融云 RongCloud

高并发 直播 直播聊天室 海量用户

「猿桌派」即将开播,聚焦客户端埋点和大数据分析

融云 RongCloud

大数据 程序员 埋点

Ajax+SSM实现客户端开发 实现简单的前后端分离

Bug终结者

Java ajax 前后端分离

超市发:多措并举 提振销售 服务顾客

科技热闻

恒源云(GPUSHARE)_[文本分类] 文本数据增强1(论文笔记)

恒源云

深度学习 语音识别

10 个打造 React.js App 的最佳 UI 框架

编程江湖

前端开发

从 Discord 看未来社交的「超级群」模式

融云 RongCloud

一站式云安全保障,就用行云管家!完美保障!

行云管家

云计算 云安全 企业上云 云资源 云管理

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