Каково использование типа asterisk (*) в Flow и что эквивалентно типу в TypeScript?

Прежде всего, я в основном знаком с TypeScript. Поток очень похож на TS во многих отношениях, но я недавно наткнулся на тип звездочки (*). Сначала я думал, что это синоним "any", но теперь, прочитав некоторые примечания к выпуску для Flow, я вижу, что это не так. Я просмотрел все официальные документы и не смог найти никакого использования "*".

Итак, что это такое и когда его использовать? Но также, что было бы прямым эквивалентом того, что в TypeScript?

Ответ 1

Изменение: так как я первоначально написал этот ответ, я узнал, что * небезопасно, когда он появляется на границах модуля. Я не могу рекомендовать его использовать, и он может быть удален в будущем.

Он просто указывает 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>);

(попробуйте поток)

Он отличается от any - any является небезопасным типом, поэтому, если вы замените * на any в этом примере, Flow не выдаст вам никаких ошибок. Вы можете заменить его на number и Flow выдаст вам аналогичную ошибку.

Ответ 2

Звездочка * в потоке сообщает, что она выводит тип, на который уже ответил Нат Мотт

Кроме того, TypScript не имеет прямого эквивалента для звездочки, и, следовательно, ему не может быть сказано вывести тип. Однако он, как и Flow, выводит типы автоматически в некоторых конкретных случаях. Документация по типу типа TypeScript, примеры вывода типа

Ознакомьтесь с unique features на этой странице: Различия между Flow и TypeScript