Убедитесь, что строка представляет собой шестнадцатеричное значение с потоком

#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' | ... ), но если вы не сможете перечислить все возможные строки, вы не сможете выполнить то, что просите.