从一些代码生成工具中,我得到了一些类似于

type ParentType = {
  viewer : {
    userByUuid: {
      username: string | null;
      legalName: string | null;
    } | null;
  } | null;
}

我希望能够引用类似于

type User = {
    username: string | null;
    legalName: string | null;
} | null;

我知道如果ParentType不能为空,我可以使用类似于

type User = ParentType['viewer']['userByUuid']

但是,我如何处理可为空类型的此类型引用?

谢谢!

推荐答案

您可以使用条件类型来提取非null部分,

type ParentType = {
    viewer : {
      userByUuid: {
        username: string | null;
        legalName: string | null;
      } | null;
    } | null;
  }

type NonNullableType<T> = T extends null ? never : T
type Viewer = NonNullableType<ParentType["viewer"]>
type User = NonNullableType<Viewer["userByUuid"]>

Typescript相关问答推荐

类型脚本不会推断键的值类型

使用前的组件渲染状态更新

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

有没有一种方法可以在保持类型的可选状态的同时更改类型?

如何根据另一个属性的布尔值来缩小函数属性的返回类型?

React typescribe Jest调用函数

如何使函数接受类型脚本中具有正确类型的链接修饰符数组

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

被推断为原始类型的交集的扩充类型的交集

已解决:如何使用值类型限制泛型键?

如何使用Geojson模块和@Types/Geojson类型解析TypeScrip中的GeoJSON?

扩展参数必须具有元组类型或传递给REST参数

保护函数调用,以便深度嵌套的对象具有必须与同级属性函数cargument的类型匹配的键

有没有可能创建一种类型,强制在TypeScrip中返回`tyPeof`语句?

为什么我的函数arg得到类型为Never?

如何在Type脚本中创建一个只接受两个对象之间具有相同值类型的键的接口?

Select 类型的子项

如何使用useSearchParams保持状态

Vite+Chrome扩展 list v3-;不能在模块外使用import语句;对于inpage脚本

如何判断路由或其嵌套路由是否处于活动状态?