乐趣区

关于前端:不使用TypeScript的7个很好的理由

大家都喜爱 TypeScript。它“解决”了 JS 的很多问题,它是 JS 的“超集”,它会让你的代码不容易出错,而且浏览起来很欢快。应用 TypeScript 有很多好的理由,但我要给你 7 个真正好的理由不要应用。

有危险

哗,怎么会有危险呢?如果 TypeScript 增加类型定义并在编译时查看它们,这怎么可能有危险?以及 IDE 集成会正告你任何类型不匹配?正是因为如此。TypeScript 仅在编译时查看类型,并且仅查看可用的类型。任何网络调用,零碎库,特定于平台的 API 和无类型的第三方库都无奈与 TypeScript 通信。当你习惯了对类型进行查看,不必齐全了解代码和平台,谬误和 bug 就会体现进去。

应用 JS,你对类型不做任何假如,你查看变量的具体值,以确保它是你所冀望的。或者,如果你不关怀它的类型,在这种非凡状况下,你不关怀。在 TS 中,你依附编译器为你做,但它只能查看这么多。你能够把这两种形式联合起来,但那有什么意义呢?如果你会花工夫写定义,而后花工夫写代码来确保这些定义在运行时失去保护,那为什么一开始就要有这些定义呢?

太乱了

另一个悖论是:语言本应该为代码库带来清晰和可读性,但它却使代码库变得含糊了。为了阐明我的意思,请查看一些我在风行的开源库中找到的示例:

// TODO: do this more elegantly
;((currentReducer as unknown) as Reducer<
  NewState,
  NewActions
>) = nextReducer

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

下一个例子如果来自 RxJS 库。

// 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);
}

我不晓得你是怎么想的,但如果我不得不打一个本应帮忙我的工具,我不认为这是一个好工具。

它不能解决问题

据说 TypeScript 能够解决 JavaScript 的问题,但事实并非如此。动静类型化在 JavaScript 中素来都不是问题,然而其余很多故障,比方 NaN === NaN 是 false 的,分号是可选的还是不可选的,一个换行符把一个对象定义改成了作用域,语法糖代替 OOP,这些的确是问题。TypeScript 并没有解决这些问题,而是引入了另一个规范,进一步分化了 JS 社区。

即便假如 JS 中短少类型是一个问题,TS 也无奈解决。你晓得是什么吗?Java、C、C# 和其余编译语言。它们能够在编译时和运行时平安地保障强类型,解释语言就是不能做到这一点。

它不是超集,而是子集

TypeScript 是编译成 JavaScript 的货色,从定义上看,它不可能是一个超集。它限度了你应用 JavaScript 所能做的事件,覆盖了它弱小的一面,同时提供了一种虚伪的安心感。 如果你真的想成为一名优良的开发者,就不要满足于劳碌的谎话,要试着去理解 JavaScript 的真正威力和它的灵活性。

它是开源的,仅此而已

应用 TypeScript 的许多起因都表明它是开源的。确实,TS 编译器是在 MIT 许可下散发的。但它依然被微软这个垄断巨头所管制,它在开源方面的提高只不过是一种营销伎俩。不要把开源和专制一概而论,微软依然能够自在地对 TS 做任何事件,而 JS 则是由一个国内委员会治理,没有通过社会的认可,是不会扭转任何货色的。

然而大公司应用它…

我不敢相信有人认为这是一个起因。大公司还应用传统的代码库,进行税务欺诈,歧视妇女。为什么忽然间他们应用 TypeScript 就是一个好例子?

然而它具备更多功能……

当初不一样了。确实,2012 年 TS 刚推出的时候,它有类等性能,在 JS 中还是没有的。然而 JS 从那时起曾经有了长足的提高,当初 TS 也在致力的追赶。如果 JS 有什么缺失,有一个 babel 插件能够做到。

感激你的浏览,心愿你喜爱这篇文章!


原文:https://medium.com/javascript-in-plain-english
作者:Michael Krasnov
翻译:公众号《前端全栈开发者》

退出移动版