Flow 中星号 (*) 类型的用途是啥,TypeScript 中的等价物是啥?
Posted
技术标签:
【中文标题】Flow 中星号 (*) 类型的用途是啥,TypeScript 中的等价物是啥?【英文标题】:What is the use of asterisk (*) type in Flow and what is the equivalent of that in TypeScript?Flow 中星号 (*) 类型的用途是什么,TypeScript 中的等价物是什么? 【发布时间】:2017-10-21 17:12:52 【问题描述】:首先,我最熟悉 TypeScript。 Flow 在很多方面看起来与 TS 非常相似,但我最近偶然发现了一个星号 (*) 类型。起初,我认为它是“any”的同义词,但现在,在阅读了 Flow 的一些发行说明后,我发现它不是。我浏览了所有官方文档,并没有找到“*”的任何用法。
那么,它是什么以及何时使用它?但是,什么是 TypeScript 中的直接等价物?
【问题讨论】:
你能展示一些示例代码来演示它的用法吗?它听起来是Literal Type,这意味着该特定变量的值只能是*
。在 Typescript 中,您可以创建字符串文字类型。 typescriptlang.org/docs/handbook/advanced-types.html
在 Kefir.js 库的流定义中可以看到大量示例:github.com/rpominov/kefir/blob/master/kefir.js.flow。例如,检查 never() 方法。它具有签名 Observable。我真的没有得到这个,因为 never() 没有返回任何东西,所以我假设它会有一个 Observable编辑:由于我最初写了这个答案,我了解到*
在模块边界出现时是不安全的。我不推荐使用它,将来可能会被删除。
它只是告诉 Flow 推断一个类型参数,而不是让你显式地写出来:
function foo(): Array<*>
return [5];
// Flow issues an error:
// 2: return [5];
// ^ number. This type is incompatible with
// 10: (foo(): Array<string>);
// ^ string
(foo(): Array<string>);
(try flow)
它与any
不同——any
是一个不安全的类型,因此如果在此示例中将*
替换为any
,Flow 不会给您任何错误。你可以用number
替换它,Flow 会给你一个类似的错误。
【讨论】:
非常感谢您的回答!我现在很清楚 Flow 中的用例。但是你能帮我解决我问题的第二部分吗? TS 的类似语法是什么? 不幸的是我不能,因为我不熟悉 Typescript。如果您每个问题只问一个问题,该网站效果最佳,那么第二部分可能是单独问题的良好候选者? 是的,听起来不错,所以我会遵循它。谢谢!【参考方案2】:Flow 中的星号*
告诉它推断类型,Nat Mote 已经回答了这个问题
此外,Typescript 没有星号的直接等效项,因此无法告诉它推断类型。但是,它确实像 Flow 一样,在某些特定情况下会自动推断类型。 TypeScript Type Inference Documentation, Type Inference Examples
在此页面上查看unique features
:
Differences between Flow and TypeScript
【讨论】:
以上是关于Flow 中星号 (*) 类型的用途是啥,TypeScript 中的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章