TS2531:即使我检查对象是否为“ null”,对象也可能为“ null”

时间:2020-08-10 18:21:41

标签: typescript

我从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此时不能为null)。什么是重写此代码的正确方法。谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

这样,第一行会将unknown缩小为object | null,而第二行可以将object | null缩小为object