Typescript TS2531:对象可能是';空';即使我检查它不是

Typescript TS2531:对象可能是';空';即使我检查它不是,typescript,Typescript,我从TS编译器中得到此错误:“TS2531:对象可能是以下代码中的“null”: const routeParamsCheck = ( routeParams: unknown ): routeParams is { slug: string; locale: string } => { return ( routeParams !== null && typeof routeParams === 'object' && 's

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

显然,在线路图之后null,typescript仍然认为该类型是未知的。就类型而言,没有任何变化。我不知道为什么会这样(也许这是一个bug或
unknown
类型的已知限制),但有一个非常简单的修复方法可以做到:只需交换前两行的顺序:

  return (
    typeof routeParams === 'object' &&
    routeParams !== null &&
    'slug' in routeParams &&
    'locale' in routeParams
  );
这样,第一行将
unknown
缩小到
object | null
,第二行将
object | null
缩小到
object

FYI这是一个已知的类型脚本