typescript - Rastavljanje nullable objekata
Typescript (ili bismo trebali reći ES) ne dopušta destrukturiranje null/undefined objekata. Baca TypeError.
Dakle, recimo da imamo nešto poput
let {a,b,c} = D;
gdje D može biti null.
Ako trebamo napraviti uvjetno destrukturiranje dodjele s provjerama na null, tada stvaramo dodatni kod za nešto što je trebalo smanjiti.
Koji je najzgodniji način korištenja toga u takvim slučajevima ili bismo trebali koristiti destrukturiranje samo za zajamčeno nenulte objekte?
Odgovor #1
Možete koristiti prazan objekt kao rezervu, i ako je D null ili undefined, dodijeljene varijable će biti undefined.
const D = null;
const { a, b, c } = D || {};
console.log(a, b, c);Koristeći TypeScript, morate dodati ispravan tip (ili any) na objekt FALLBACK (TS playground). Na primjer:
interface Obj {
a?: string;
b?: string;
c?: string;
}
const D = null;
const { a, b, c } = D || {} as Obj;
console.log(a, b, c);
Druga opcija je koristiti širenje objekta, budući da širenje null ili undefined rezultira praznim objektom (pogledajte ovaj odgovor na SO).
const D = null;
const { a, b, c } = { ...D };
console.log(a, b, c);Koristeći TypeScript, morate dodati tipove za varijablu koju širite i objekt koji destrukturirate. Na primjer (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);
Ako trebate rukovati ugniježđenim destrukturiranjem, koristite zadane vrijednosti:
const D = null;
const { a, a: { z } = {}, b, c } = { ...D };
console.log(a, b, c, z);