【发布时间】:2021-02-23 10:24:19
【问题描述】:
这个问题的重点是 React 中 Typescript 的使用。
我有两个 React 钩子:useStatus(): Status 和 useResult(): Result | null,并像这样使用它们:
const status = useStatus();
const result = useResult();
if (status !== "success") {
return <Loading />;
}
return ... something using result ...;
我可以更改两个函数的签名(参数和返回类型)。
我无法更改 useResult 调用的位置(它必须在 if 之前) - 这是 React 的唯一限制。
从概念上讲,如果status 是"success",我知道result 不会是null。我想以某种方式将此信息编码为返回类型。这样一来,Typescript 就会在最后一行知道 status 是 "success" 所以 result 是 Result(不是 Result | null)。
我知道我可以将两个不同的组件分开 - 这就是我已经在做的事情,但我很好奇我是否可以避免这种情况。
有没有办法做到这一点?
谢谢! :)
【问题讨论】:
-
为什么不把两个钩子合二为一呢?
-
在这里你可以找到一些关于在 React catchts.com/unions 中处理联合的信息
-
只是想发表与上述相同的评论。如果您需要付出额外的努力来整理您的类型,那么代码很可能存在一些概念问题。在这种情况下,如果我理解正确的话,有两个单独的钩子从同一来源传递数据。您只需要将这些钩子合二为一。
标签: reactjs typescript react-hooks