选择Typescript的原因:支持定义执行时的泛型参数
Posted TypeScript中文圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择Typescript的原因:支持定义执行时的泛型参数相关的知识,希望对你有一定的参考价值。
在过去的一年里,我使用Flow构建了Saul,同时在工作项目中使用Typescript。
问题起因
在函数调用时指定泛型参数(generic parameters)是我在使用Flow和Typescript的过程中面临的最大的问题,下面是一个例子:
在函数调用时,我非常注重改进我的泛型参数(generic parameters)——其他依赖泛型(generic)使用的开发人员也是如此。在实际开发中,处理高阶函数(higher-order functions)和复合函数(functional composition)时如果没有这个能力将会是一场灾难。
Typescript与Flow比较
简而言之,在每个使用函数中,如果我发送一堆泛型参数(generic arguments)到函数中,这个函数可以根据这些泛型参数给我一个回应,类型系统就可以给我一些缩小了泛型范围的选择。Typescript会这样做,但是Flow不会。
假设我有一个定义了一个高阶函数,如下:(这是一个高阶react组件,也是我项目中的一个实例)
简单的说,withAuthentication可以得到我传进去的所有属性,也就是OwnProps,并且分配一个user属性给它。
用Flow调用它:
用Typescript调用:
可以看出来,Typescript会记录我export出来的类型HOCType,当实际调用时AuthenticatedPage 会拥有IPageProps属性,包装组件IPageProps还会拥有 user属性。
而在Flow中,我必须明确的说明AuthenticatedPage的类型。
尽管这是一个更大的HOCs(高阶组件Higher-order components),但是当使用诸如lodash,ramda,immutable等功能链接/组合的库时,它可以大大改进你的类型链条(types along the chain)。
注:文中的说法以写作这篇文章时的情况为准。Flow在未来可能会增加对这一差异的支持,不过当前因为这一问题,我已经开始把整个项目从Flow重构为Typescript了。
原文链接:https://codeburst.io/why-i-choose-typescript-specifying-generic-parameters-during-call-time-706003f55675
以上是关于选择Typescript的原因:支持定义执行时的泛型参数的主要内容,如果未能解决你的问题,请参考以下文章