你们都喜欢TypeScript。它“解决”了JS的不少问题,它是JS的“超集”,它会让你的代码不容易出错,并且阅读起来很愉快。使用TypeScript有不少好的理由,但我要给你7个真正好的理由不要使用。javascript
哗,怎么会有风险呢?若是TypeScript添加类型定义并在编译时检查它们,这怎么可能有风险?以及IDE集成会警告你任何类型不匹配?正是由于如此。TypeScript仅在编译时检查类型,而且仅检查可用的类型。任何网络调用,系统库,特定于平台的API和无类型的第三方库都没法与TypeScript通讯。 当你习惯了对类型进行检查,不用彻底理解代码和平台,错误和bug就会体现出来。前端
使用JS,你对类型不作任何假设,你检查变量的具体值,以确保它是你所指望的。或者,若是你不关心它的类型,在这种特殊状况下,你不关心。在TS中,你依靠编译器为你作,但它只能检查这么多。你能够把这两种方式结合起来,但那有什么意义呢?若是你会花时间写定义,而后花时间写代码来确保这些定义在运行时获得维护,那为何一开始就要有这些定义呢?java
另外一个悖论是:语言本应该为代码库带来清晰和可读性,但它却使代码库变得模糊了。为了说明个人意思,请查看一些我在流行的开源库中找到的示例:typescript
// TODO: do this more elegantly ;((currentReducer as unknown) as Reducer< NewState, NewActions >) = nextReducer
这是来自Redux库的,全部这4行代码都将 nextReducer
分配给 currentReducer
。安全
下一个例子若是来自RxJS库。babel
// 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#和其余编译语言。它们能够在编译时和运行时安全地保证强类型,解释语言就是不能作到这一点。this
TypeScript是编译成JavaScript的东西,从定义上看,它不多是一个超集。它限制了你使用JavaScript所能作的事情,掩盖了它强大的一面,同时提供了一种虚假的安心感。若是你真的想成为一名优秀的开发者,就不要知足于安逸的谎话,要试着去了解JavaScript的真正威力和它的灵活性。spa
使用TypeScript的许多缘由都代表它是开源的。的确,TS编译器是在MIT许可下分发的。但它仍然被微软这个垄断巨头所控制,它在开源方面的进步只不过是一种营销手段。不要把开源和民主混为一谈,微软仍然能够自由地对TS作任何事情,而JS则是由一个国际委员会管理,没有通过社会的承认,是不会改变任何东西的。
我不敢相信有人认为这是一个缘由。大公司还使用传统的代码库,进行税务欺诈,歧视妇女。为何忽然间他们使用TypeScript就是一个好例子?
如今不同了。的确,2012年TS刚推出的时候,它有类等功能,在JS中仍是没有的。可是JS从那时起已经有了长足的进步,如今TS也在努力的追赶。若是JS有什么缺失,有一个babel插件能够作到。
感谢你的阅读,但愿你喜欢这篇文章!
原文:https://medium.com/javascript-in-plain-english做者:Michael Krasnov翻译:公众号《前端全栈开发者》