1

我从 TS 编译器收到此错误:以下代码中的“TS2531:对象可能为'null'”:

const routeParamsCheck = (
  routeParams: unknown
): routeParams is { slug: string; locale: string } => {
  return (
    routeParams !== null &&
    typeof routeParams === 'object' &&
    'slug' in routeParams &&
    'locale' in routeParams
  );
};

我想知道为什么它会发生在这一行: routeParams 中的 'slug' (很明显,此时 routeParams 不能为空)。重写此代码的正确方法是什么。谢谢!

4

1 回答 1

3

显然,在 line 之后routeParams !== null,typescript 仍然认为 type 是unknown。即,就类型而言,没有任何变化。我不确定这是为什么(可能是错误或unknown类型的已知限制),但是您可以做一个非常简单的修复:只需交换前两行的顺序:

  return (
    typeof routeParams === 'object' &&
    routeParams !== null &&
    'slug' in routeParams &&
    'locale' in routeParams
  );

这样第一行将缩小unknownobject | null,并且object | null可以object通过第二行缩小到。

于 2020-08-10T18:32:07.833 回答