前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7 个不使用 TypeScript 的理由

7 个不使用 TypeScript 的理由

作者头像
疯狂的技术宅
发布2020-02-26 14:51:22
9750
发布2020-02-26 14:51:22
举报
文章被收录于专栏:京程一灯京程一灯

每日前端夜话第281篇

翻译:疯狂的技术宅

作者:Michael Krasnov

来源:medium

正文共:1608 字

预计阅读时间:6分钟

很多人人都喜欢 TypeScript。它“解决”了 JS 的许多问题,它是 JS 的“超集”,它能够使你的代码易于查错且易于阅读。有很多使用 TypeScript 的充分理由,但是我将给你 7 个不去用它的“非常好的”理由。

有风险

如果 TypeScript 添加类型定义并在编译时检查它们,怎么会有风险?何况 IDE 集成还会警告你有关类型不匹配的信息。正因为如此,TypeScript 将只会在编译时检查类型和可用的类型。任何网络调用,系统库,特定于平台的 API 和无类型的第三方库都无法与 TypeScript 通信。当你习惯检查类型并且不必完全了解代码和平台时,错误和 bug 就会显现出来。

使用 JS,你无需对类型做任何假设,并且可以检查变量的具体值以确保它是你期望的值。或者,如果你在这种情况下不关心其类型,则不必进行检查。在 TS 中,你依靠编译器为你完成这个任务,但是它只能进行检查。你可以将这两种方式结合起来,那又有什么意义呢?如果要花时间编写定义,然后花时间编写代码以确保在运行时维护这些定义,那么为什么要用它们呢?

很乱

另一个悖论:本应该为代码库带来清晰度和可读性的语言反而使它模糊。为了说明我的意思,请查看一些我在流行的开源库中找到的示例:

代码语言:javascript
复制
// TODO: do this more elegantly
;((currentReducer as unknown) as Reducer<
  NewState,
  NewActions
>) = nextReducer

这是来自 Redux 库的代码,所有这 4 行代码都是把 nextReducer 分配给 currentReducer

代码语言:javascript
复制
// HACK: Since TypeScript inherits static properties too, we have to
// fight against TypeScript here so Subject can have a different static create signature
/**
 * Creates a new cold Observable by calling the Observable constructor
 * @static true
 * @owner Observable
 * @method create
 * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
 * @return {Observable} a new cold observable
 * @nocollapse
 * @deprecated use new Observable() instead
 */
static create: Function = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {
  return new Observable<T>(subscribe);
}

第二个例子来自 RxJS 库。我不知道你是怎么想的,但是如果我必须和一种本该为我提供帮助的工具“战斗”,那么我认为这不是一个好工具。

它不能解决问题

据说 TypeScript 可以解决 JavaScript 中存在的问题。但事实上并非如此。动态类型从来都不是 JavaScript 的问题,但是许多其他陷阱,例如 NaN === NaN 为假,分号为可选或不可选,将对象定义更改为作用域的换行符,代替 OOP 的语法糖确实是问题。TypeScript 并没有解决这些问题,而是引入了另一个标准,进一步分化了 JS 社区。

即使我们假设 JS 中缺少类型是一个问题,TS 也无法解决它。你知道吗,Java、C、C# 和其他编译型语言可以安全地在编译时和运行时保证强类型。解释型语言无法做到这一点。

并不是超集,而是一个子集

TypeScript 是可以编译为 JavaScript 的东西,根据定义它不能是超集。它限制了你可以用 JavaScript 进行的操作,并掩盖了它的强项,同时提供了安全的假象。如果你真的想成为一名优秀的开发人员,请不要为安慰自己而撒谎,而是要去尝试了解 JavaScript 的真正功能及其灵活性。

它是开源的,仅此而已

使用 TypeScript 的许多原因都表示它是开源的。是的,TS 编译器是在 MIT 许可下分发的。但是它仍然由微软(一家垄断性公司)所控制,其开源进步不过是营销方面的举动。不要把开放源代码与自由相混淆:Microsoft 仍然可以任意对 TS 做任何事情,而且你就在这里看着。另一方面,JS 受国际委员会的管理,未经社区批准不会对任何内容进行更改。

但是大公司会用它…

我不敢相信居然有人认为这是使用它的一个原因。大公司还使用旧版的代码库,进行税务欺诈和歧视妇女呢。为什么突然之间使用 TypeScript 就是一个很好的例子?

但它能够更多功能…

不再是这样了。的确,当 TS 于 2012 年首次推出时,它具有诸如类这样的功能,但在 JS 中尚不可用。但是从那时起,JS 已经走了很长一段路,现在 TS 正努力赶上。如果 JS 中缺少什么功能,可以用 babel 插件来完成。

原文链接

https://medium.com/javascript-in-plain-english/7-really-good-reasons-not-to-use-typescript-166af5

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有风险
  • 很乱
  • 它不能解决问题
  • 并不是超集,而是一个子集
  • 它是开源的,仅此而已
  • 但是大公司会用它…
  • 但它能够更多功能…
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档