首先,我大多熟悉TypeScript。 Flow在许多方面看起来与TS非常相似,但我最近偶然发现了一个星号(*)类型。起初,我认为它是“any”的同义词,但是现在,在阅读了Flow的一些发行说明后,我发现它并非如此。我浏览了所有官方文档,但未能找到“*”的任何用法。
那么,它是什么以及何时使用它?但是,什么是TypeScript中的直接等价?
答案 0 :(得分:21)
编辑:自从我最初写这个答案以来,我了解到*
出现在模块边界时是不安全的。我不建议使用它,将来可能会将其删除。
它只是告诉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会给你一个类似的错误。
答案 1 :(得分:2)
Flow中的星号*
告诉它推断类型,Nat Mote已经回答了
此外,Typescript与星号没有直接的等价物,因此无法告诉它推断出类型。但是,它与Flow一样,在某些特定情况下会自动推断类型。 TypeScript Type Inference Documentation,Type Inference Examples
在此页面上查看unique features
:
Differences between Flow and TypeScript
答案 2 :(得分:0)
没有足够的声誉来发表评论。
在打字稿2.8中更新:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-inference-in-conditional-types
因此您可能有T<*>
(流)在打字稿T<infer U>
中。
我是打字机的新手,如果我输入错了,请纠正我。