typescript - Destructurarea obiectelor nullable
Typescript (sau ar trebui să spunem ES) nu permite destructurarea obiectelor null/undefined. Aruncă TypeError.
Deci, să zicem că avem ceva de genul
let {a,b,c} = D;
unde D ar putea fi null.
Dacă trebuie să facem alocarea destructurării condiționate cu verificări de null, atunci creăm cod boilerplate pentru ceva care a fost menit să îl reducă.
Care este cel mai elegant mod de a-l folosi în cazuri ca acesta sau ar trebui să folosim destructurarea doar pentru obiecte garantat non-null?
Răspuns #1
Poți folosi un obiect gol ca rezervă, și dacă D este null sau undefined, variabilele atribuite vor fi undefined.
const D = null;
const { a, b, c } = D || {};
console.log(a, b, c);Folosind TypeScript, trebuie să adaugi tipul corect (sau any) la obiectul FALLBACK (TS playground). De exemplu:
interface Obj {
a?: string;
b?: string;
c?: string;
}
const D = null;
const { a, b, c } = D || {} as Obj;
console.log(a, b, c);
O altă opțiune este să folosești răspândirea obiectului, deoarece răspândirea lui null sau undefined rezultă într-un obiect gol (vezi acest răspuns de pe SO).
const D = null;
const { a, b, c } = { ...D };
console.log(a, b, c);Folosind TypeScript, trebuie să adaugi tipurile variabilei pe care o extinzi și obiectului pe care îl destructurezi. De exemplu (TS Playground):
interface Obj {
a?: string;
b?: string;
c?: string;
}
const D = null;
const { a, b, c } = { ...D as any } as Obj;
console.log(a, b, c);
Dacă trebuie să gestionezi destructurarea imbricată, folosește valorile implicite:
const D = null;
const { a, a: { z } = {}, b, c } = { ...D };
console.log(a, b, c, z);