#javascript #reactjs #flowtype
#тип потока
Вопрос:
Я хотел бы убедиться, что получаемое значение является шестнадцатеричной строкой. В настоящее время я говорю
type Color = string;
function foo(color: Color){}
Но я хотел бы сказать
type Color = '#' stringOfLength-3-6-8;
function foo(color: Color){}
Есть ли способ выразить подобные ограничения в потоке?
Комментарии:
1. Регулярное выражение строки, чтобы проверить, совпадает ли она
/#[0123456789ABCDEF] /i
?2. Это легко определить во время выполнения, и для этого существует множество вариантов, включая использование регулярных выражений, как вы предлагаете. Но суть этого вопроса заключается в том, может ли Flow обеспечить эту гарантию статически, и ответ отрицательный.
Ответ №1:
Нет, это не то, что может выразить система типов. Вы можете создать тип, представляющий собой объединение литералов (например type Foo = 'foo' | 'bar' | ...
), но если вы не сможете перечислить все возможные строки, вы не сможете выполнить то, что просите.