Каково использование типа 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
Ответ 3
Недостаточно репутации, чтобы оставить комментарий.
Обновление в машинописи 2.8:
https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-inference-in-conditional-types
так что вы можете иметь T<*>
(поток) в машинописном тексте T<infer U>
. Я новичок в машинописи, поправьте меня, если я ошибаюсь.