大家都喜欢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插件可以做到。
(责任编辑:admin)