Hur man konverterar en nullable typ till en icke-nullable typ (i TypeScript)?


Jag skulle vilja konvertera en nullable-typ till en icke-nullable-typ.

Till exempel, om jag har en typ som:

const type A = {b: "xyz"} | null

då skulle jag vilja extrahera:

{b:"xyz"}

genom att göra så här:

A!

men det fungerar inte (givetvis är !-operatorn för nullable "variabler", inte nullable "typer").

Kan någon hjälpa mig att lösa det här problemet? Tack!

Svar #1

Om du har en typ:

type A = {b: "xyz"} | null

Att använda NonNullable tar bort både null och undefined från din unionstyp:

type NonNullableA = NonNullable<A>

Om du bara vill ta bort null men fortfarande behålla undefined kan du använda Exclude:

type NullExcludedA = Exclude<A, null>

I detta fall kommer både NonNullableA och NullExcludedA att ge den typ du söker:

{b:"xyz"}

Svar #2

Mitt problem var att ett Promise typat så här:

myPromise: (args?: any) => Promise<X> ...

tolkas av TypeScript som en Promise<void | X> av någon anledning.

Var tvungen att kasta typen korrekt med denna funktion

const notUndefined = <T> (a: T | void/*undefined / null*/) => a as T;
from(myPromise).pipe(map(notUndefined)) (Observable<X>)

Relaterade artiklar