typescript - Tilldela en typ till en egenskap som är en nästlad typ av en Maybe-typ


Jag försöker tilldela en egenskap en typ som genererats av graphql-codegen-verktyget. Typen jag försöker tilldela är en nästlad typ. Givet följande typ:

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

Jag behöver kunna göra:

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

Problemet jag stöter på är dock att typen av someKey är en Maybe-typ, så Typescript klagar på att det inte finns någon someNestedKey-egenskap på <Maybe { __typename?: "OtherType" | ...} & { someNestedKey: (...)[] }>-typen (dvs. typen av someKey).

I Typescript kan du använda !-metoden för att ange att du är säker på att egenskapsvärdet för en typ som är unionerad med undefined och/eller null faktiskt existerar i det här fallet. Finns det ett sätt att göra något liknande när man tilldelar en typ?

Eftersom jag använder verktyget graphql-codegen har jag inte kontroll över dessa typer.

Svar #1

Jag hittade precis svaret i dokumentationen. Jag behöver använda NonNullable-typen.

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

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