Сложное веб-приложение, использующее множество модулей npm, очень редко будет строго напечатано.Цель строгой типизации в JS состоит в том, чтобы набрать как можно больше, насколько это возможно или даже разумно.Модули, у которых нет libdefs, придут как any
, и это хорошо. Очевидно, было бы замечательно, если бы все, что вы использовали, имело полные типы, но только учитывая способ, которым достигнут прогресс, это практически невозможно,Добавьте к этому тот факт, что простой процесс обновления часто приводит к появлению большего количества ошибок в вашей кодовой базе, и вы в конечном итоге вынуждены признать, что типизация является прогрессивным процессом, а не блокирующим.
Теперь, когда это не так, кажется, у вас есть несколько разных подвопросов:
Мне нужно постоянно искать типы
Не совсем уверен, что вы подразумеваете под этим, но вы можете сказать, что трудно найти типы для пакета, который вы используете.Убедитесь, что вы знакомы с тем, как работает flow-typed
CLI (npx flow-typed
), он поможет вам в поиске и установке совместимых libdefs.Если вы ничего не нашли для модуля в flow-typed
, то покопайтесь в исходном репозитории github и убедитесь, что типы потоков не поставляются с самим модулем.Если вы столкнетесь с пакетом с файлом .d.ts
(TypeScript), попробуйте преобразовать его в libdef с помощью flowgen .Если ничто не оказывается плодотворным, вы, вероятно, должны просто отказаться от типов и продолжить.
В этом случае я бы фактически запустил свой собственный libdef (npx flow-typed create-stub <package name>
) и заполнил некоторые основные типы, как я и делал.Вы можете начать очень просто, у меня есть libdef для react-select
, который проверяет только одну опору компонента, options
проп (однако я не помню, почему у меня это есть: P).Опять же, прогрессивная типизация является целью.Проверка того, что один винт действительно хорош, по сравнению с проверкой ни одного.
Мне трудно найти документацию по типам и способам их использования
Там вообще нетнастоящая документация для libdefs в flow-typed
, если она не написана автором пакета где-нибудь.Я обычно читаю сами libdefs, но если вы находите использование запутанным, я бы порекомендовал посмотреть тесты , связанные с libdef.Вы также можете просмотреть любые соответствующие вопросы или PR , чтобы найти примеры использования.
иногда даже не найти ответа
Добавить $FlowFixMe
и возвращайтесь к нему позже, если это слишком сильно замедляет вас.Все эти вещи станут намного более управляемыми, так как вы привыкнете к потоку и строгой типизации в целом, и поток, и libdefs будут постоянно улучшаться.
Я все еще получаю ошибки в моей IDE
Если вы не можете их исправить, добавьте $FlowFixMe
и возвращайтесь позже.На самом деле в Flow есть инструмент, включенный в его исходный код, в котором есть утилита для добавления $FlowFixMe
для каждой ошибки, но, поскольку в настоящее время он не поставляется в npm, вам необходимо клонировать исходный код, чтобы использовать его.