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);

Povezani članci