在Flow中使用星号(*)类型有什么用,在TypeScript中有什么用呢?

时间:2017-05-22 06:42:38

标签: javascript types flowtype

首先,我大多熟悉TypeScript。 Flow在许多方面看起来与TS非常相似,但我最近偶然发现了一个星号(*)类型。起初,我认为它是“any”的同义词,但是现在,在阅读了Flow的一些发行说明后,我发现它并非如此。我浏览了所有官方文档,但未能找到“*”的任何用法。

那么,它是什么以及何时使用它?但是,什么是TypeScript中的直接等价?

3 个答案:

答案 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 DocumentationType Inference Examples

在此页面上查看unique featuresDifferences 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>中。 我是打字机的新手,如果我输入错了,请纠正我。