我有一个这样的联合类型:
$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"
答案 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
,除非您指定类型,因此这种技术不会捕获太多错误(除非您使用文字字符串类型传递变量,您可能会做)。