做者:Michael Krasnov翻译:疯狂的技术宅javascript
原文:https://medium.com/javascript...前端
未经容许严禁转载java
不少人人都喜欢 TypeScript。它“解决”了 JS 的许多问题,它是 JS 的“超集”,它可以使你的代码易于查错且易于阅读。有不少使用 TypeScript 的充分理由,可是我将给你 7 个不去用它的“很是好的”理由。程序员
若是 TypeScript 添加类型定义并在编译时检查它们,怎么会有风险?况且 IDE 集成还会警告你有关类型不匹配的信息。正由于如此,TypeScript 将只会在编译时检查类型和仅可用的类型。任何网络调用,系统库,特定于平台的 API 和无类型的第三方库都没法与 TypeScript 通讯。当你习惯检查类型而且没必要彻底了解代码和平台时,错误和 bug 就会显现出来。面试
使用 JS,你无需对类型作任何假设,而且能够检查变量的具体值以确保它是你指望的值。或者,若是你在这种状况下不关心其类型,则没必要进行检查。在 TS 中,你依靠编译器为你完成这个任务,可是它只能进行检查。你能够将这两种方式结合起来,那又有什么意义呢?若是要花时间编写定义,而后花时间编写代码以确保在运行时维护这些定义,那么为何要用它们呢?typescript
另外一个悖论:本应该为代码库带来清晰度和可读性的语言反而使它模糊。为了说明个人意思,请查看一些我在流行的开源库中找到的示例:segmentfault
// TODO: do this more elegantly ;((currentReducer as unknown) as Reducer< NewState, NewActions >) = nextReducer
这是来自 Redux 库的代码,全部这 4 行代码都是把 nextReducer
分配给 currentReducer
。安全
// 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 插件来完成。