javascript - Hur kontrollerar man om typen är undefined i Typescript villkorliga typer?


Jag har för närvarande den här typen:

type ReturnType<T, E> = [T, E]

Jag försöker göra denna typ “smartare” med dessa regler:

  • Om T är undefined, skulle typen vara [undefined, E]
  • Om E är undefined, skulle typen vara [T]
  • T och E kan inte båda vara undefined

Jag försöker tillämpa dessa regler med Typescripts Conditional Types.
Är det ens möjligt att implementera detta?

Detta är vad jag har fått hittills:

type ReturnType<T, E> = 
    T extends undefined 
    ? E extends undefined ? never : [undefined, E]
    : E extends undefined ? [T] : never

Svar #1

Det du verkar missa är att du kan göra tester för både T och E samtidigt med:

[T, E] extends [TypeA, TypeB] ? ... : ...

Genom att använda det kan du göra:

type MyReturnType<T, E> = 
    [T, E] extends [undefined, undefined] ? never
    : T extends undefined ? [undefined, E]
    : E extends undefined ? [T]
    : [T, E]

type A = MyReturnType<undefined, undefined> // never
type B = MyReturnType<string, undefined> // [string]
type C = MyReturnType<undefined, number> // [undefined, number]
type D = MyReturnType<boolean, string> // [boolean, string]

Lekplats

Relaterade artiklar