Dan*_*noz 8 history typescript reactjs react-router-dom
有人可以帮我理解以下类型声明的含义...
type PoorMansUnknown = {} | null | undefined;
Run Code Online (Sandbox Code Playgroud)
这是一个 TypeScript 声明,我在history包的上下文中遇到过它。
我已经四处搜索试图自己理解它,但是,鉴于我对 TypeScript 还很陌生,这让我有点困惑。我发现了以下信息:
我的假设是在这一点上,这个声明的作者希望它是一种说法……在运行时,这个东西可以是一个空对象,也可以是 null 或未定义的。
有关更多上下文,这种类型在我的雷达上出现的方式在react-router-dom包中(此处为 typedef)。具体来说,我去使用组件Redirect并且它的属性为: object因为我希望能够告诉组件我已经路由到我之前所在的位置
例如
<Redirect to={{
pathname: "/login",
state: { from: "current-path }
}} />
Run Code Online (Sandbox Code Playgroud)
反应路由器的 doco 说......
可以通过重定向到组件中的 this.props.location.state 访问状态对象。然后将通过路径名“/login”指向的登录组件中的 this.props.location.state.referrer 访问这个新的引用键(不是特殊名称)
所以,我去访问 props.location.state 这样......
const { from } = location.state || { from: { path: '/' } }
Run Code Online (Sandbox Code Playgroud)
我得到一个错误
Property 'from' does not exist on type '{} | { from: { path: string; }; }'.
Run Code Online (Sandbox Code Playgroud)
我通过 typedef 链跟踪它,从LocationState开始,一直到PoorMansUnknown 的声明
这就是我开始困惑的地方。这是什么类型?我该如何处理?
我在这里找到了与它相关的内容,它说将其转换为any. 所以我这样做了,因此:
const { from } = location.state as any || { from: { path: '/' } }
Run Code Online (Sandbox Code Playgroud)
但我不确定。它确实有效,但这只是一种解决方法吗?
长话短说,你以前遇到过这样的事情吗?
type PoorMansUnknown = {} | null | undefined;
Run Code Online (Sandbox Code Playgroud)
如果是这样,您认为这意味着什么?您将如何处理使用它的组件?
Oli*_*Ash 10
PoorMansUnknown应该等同于unknown类型。我们使用PoorMansUnknownwhen unknownis not available,即因为我们必须支持不支持该unknown类型的旧版 TypeScript 。
“未知”是历史状态的默认类型。您可以自定义它:
type Props = RouteComponentProps<{}, StaticContext, { from: { pathname: string; }; }>;
const MyComponent: FC<Props> = ({ location }) => {
const { from } = location.state || { from: { pathname: '/' } }
// …
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5537 次 |
| 最近记录: |