将类型分配给作为 Maybe 类型的嵌套类型的属性

Posted

技术标签:

【中文标题】将类型分配给作为 Maybe 类型的嵌套类型的属性【英文标题】:Assigning a type to a property that is a nested type of a Maybe type 【发布时间】:2020-05-23 18:29:18 【问题描述】:

我正在尝试将graphql-codegen 工具生成的类型分配给属性。我要分配的类型是嵌套类型。给定以下类型:

type SomeType = 
  someKey: Maybe<
     __typename?: "OtherType" | undefined  & 
     someNestedKey: ( __typename?: "AnotherType" | undefined  & Pick<AnotherType, "prop1" | "prop2">)[]  
  >

我需要能够做到:

myProperty: SomeType['someKey']['someNestedKey'] = []

但是,我遇到的问题是 someKey 的类型是 Maybe 类型,因此 Typescript 抱怨 someNestedKey 类型上没有 someNestedKey 属性(即类型someKey)。

在 Typescript 中,您可以使用 ! 方法声明您确定与 undefined 和/或 null 联合的类型的属性值确实存在于这个案例。分配类型时有没有办法做类似的事情?

由于我使用的是graphql-codegen 工具,因此我无法控制这些类型。

【问题讨论】:

【参考方案1】:

我刚刚在文档中找到了答案。我需要使用NonNullable 类型。

myProperty: NonNullable<SomeType['someKey']>['someNestedKey'] = []

参考:https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullablet

【讨论】:

以上是关于将类型分配给作为 Maybe 类型的嵌套类型的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在plsql中将对象类型属性的值分配给具有相同属性属性的不同对象类型?

参数类型“MaterialColor”不能分配给参数类型“Paint”

无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型

访问从 GraphQL 生成的多个嵌套 TypeScript 类型

与 Typescript 反应:“never[]”类型的参数不可分配给“StateProperties |”类型的参数(() => 状态属性)'

IfcRelDefines