大家都喜爱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
翻译:公众号《前端全栈开发者》