否定Flow中的类型

时间:2018-05-30 12:37:38

标签: flowtype

我有一个这样的联合类型:

$result = shell_exec('export HOME=/var/www/html/ && soffice --headless --convert-to pdf --outdir /var/www/html/ /var/www/html/xyz.docx');
   echo $result;

现在我想知道我是否可以输入该变量将是一个字符串但不是上述

例如:

type ActionTypes = "ACTION_ONE" | "ACTION_TWO" | "ACTION_THREE"

1 个答案:

答案 0 :(得分:1)

  

tl; dr:可能是类型断言,但很难有效使用

我认为从string类型中排除字符串文字的方法并不简单。你可能考虑使用type assertion通过(ab)做变量的$Call<F, T>,但这种技术几乎肯定是个坏主意:

Try

type ActionTypes = "ACTION_ONE" | "ACTION_TWO" | "ACTION_THREE"

type NonActionFuncType<T> =
  (<T: ActionTypes>(T) => false) & (<T: string>(T) => true);

const good = "blah";
(true: $Call<NonActionFuncType<typeof good>, typeof good>) // Passes

const bad: "ACTION_ONE" = "ACTION_ONE";
(true: $Call<NonActionFuncType<typeof bad>, typeof bad>) // Fails
实际上,我建议你寻找另一种方式去做你想做的事情。 Flow会自动将所有字符串文字键入为string,除非您指定类型,因此这种技术不会捕获太多错误(除非您使用文字字符串类型传递变量,您可能会做)。