在 Typescript 中,什么是 type PoorMansUnknown = {} |空 |未定义,你会如何处理它?

In Typescript, what is type PoorMansUnknown = {} | null | undefined and how would you deal with it?

谁能帮我理解以下类型声明的含义...

type PoorMansUnknown = {} | null | undefined;

这是一个 TypeScript 声明,我在 history 包的上下文中遇到过它。

我四处搜索以尝试自己理解它,但是考虑到我对 TypeScript 还很陌生,它让我有点难过。我在上面找到了以下信息:

此时我的假设是,这个声明的作者打算用它来表达...在运行时,这个东西可以是空对象或 null 或未定义。

有关更多上下文,这种类型出现在我的雷达上的方式是在包内 react-router-dom (typedef here). Specifically, I went to use the component Redirect and it's property to: object 因为我希望能够告诉组件我已经路由到我之前所在的位置

例如

<Redirect to={{
  pathname: "/login",
  state: { from: "current-path }
 }} />

反应路由器的 doco 说...

The state object can be accessed via this.props.location.state in the redirected-to component. This new referrer key (which is not a special name) would then be accessed via this.props.location.state.referrer in the Login component pointed to by the pathname '/login'

所以,我就这样去访问props.location.state...

const { from }  = location.state || { from: { path: '/' } }

然后出现错误

Property 'from' does not exist on type '{} | { from: { path: string; }; }'.

我通过 typedef 链追踪它,从 LocationState 开始,一直到 PoorMansUnknown

的声明

这就是我开始困惑的地方。这是什么类型?我该如何处理?

我发现了一些与之相关的东西 here,它说要把它转换为 any。所以我这样做了:

const { from }  = location.state as any || { from: { path: '/' } }

但我不确定。它确实有效,但这只是一种解决方法吗?


长话短说,你以前遇到过这样的事情吗?

type PoorMansUnknown = {} | null | undefined;

如果是这样,您认为这意味着什么?您将如何使用使用它的组件?

PoorMansUnknown 应该等同于 unknown 类型。当 unknown 不可用时,我们使用 PoorMansUnknown,即因为我们必须支持不支持 unknown 类型的旧版本的 TypeScript。

"Unknown" 是历史状态的默认类型。您可以自定义它:

type Props = RouteComponentProps<{}, StaticContext, { from: { pathname: string; }; }>;

const MyComponent: FC<Props> = ({ location }) => {
  const { from }  = location.state || { from: { pathname: '/' } }
  // …
}

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/ee646ad6a1cd47f71f099c0a03686d8f3547f3b0/types/react-router/test/examples-from-react-router-website/Auth.tsx#L72-L102