Zpravy

Jak používat Omit?

Pokud vidíte výše uvedené rozhraní, má 3 vlastnosti: název, popis a dokončeno. Pokud chcete z tohoto rozhraní odstranit klíč názvu, můžete použít typ nástroje Vynechat. Ale zde vytvořím vlastní typ Omit, který bude dělat totéž, co obslužný typ Omit.

type CustomOmitT,K extends keyof T> = [Key in keyof T as Key extends K ? never : Key] : T[Key] > 

Vstupte do režimu celé obrazovky

Ukončete režim celé obrazovky

Pokud vidíte výše uvedený fragment kódu, který očekává typ a klíče. Vynechat pouze odstraní klíče z typu nebo rozhraní, které předáváme, proto jsem vrátil K extends keyof T . a později musíme jen zkontrolovat, zda je klíč k dispozici v K, pokud je dostupný, vrátíme se nikdy jiný nevrátí pár klíčHodnota.

type TodoPreview = OmitTodo, "title">; type TodoPreviewCustomOmit = CustomOmitTodo, "title">; 

Vstupte do režimu celé obrazovky

Ukončete režim celé obrazovky

Výše uvedené oba úryvky budou fungovat stejně a vybere všechny klíče/hodnoty kromě klíče názvu z typu Todo. Např.

const todo: TodoPreviewCustomOmit = description: string, completed: boolean, > 

Vstupte do režimu celé obrazovky

Ukončete režim celé obrazovky

Další podrobnosti naleznete v oficiálním doc

Nejlepší komentáře (4)

22. 2021
Rozbalovací nabídka

Proč bych potřeboval vlastní typ vynechání?

Líbí se mi komentář:

3 Líbí se mi tlačítko Komentář

Ajay kumbhare
Javascript Enthusiastic | Cvičení FP
Surat, Indie
Mistr počítačových aplikací
Softwarový inženýr ve společnosti MakeMyTrip ✈️
11. 2020
Rozbalovací nabídka

Nepotřebujete, ale v některých případech, pokud chcete vytvořit nějaké vlastní typy na základě vašeho požadavku, pak vám pomůže získat představu, jak to můžete implementovat.

PS Cvičím strojopis, abych mohl den za dnem zdokonalovat své dovednosti ☺️

Líbí se mi komentář:

3 Líbí se mi tlačítko Komentář

Kirill Šestakov
24. 2017
Rozbalovací nabídka

Je to velmi dobrý způsob cvičení

Líbí se mi komentář:

3 Líbí se mi tlačítko Komentář

Kostiantyn Kubusha
25. 2021
Rozbalovací nabídka

Děkuji Ajay, hledal jsem syntaxi, jak vyloučit některé klíče na základě podmínky, a nakonec jsem to našel zde. S použitím konstrukce podmíněných klíčů jako
[Klíč v klíči T jako klíč rozšiřuje K ? never : Key] existuje tolik skvělých věcí, které lze dělat.
Zde jsem například vytvořil jednoduchý typ, abych získal pouze vlastnosti z poskytnutého typu:

typ Vlastnosti = [Klíč v klíči T jako T[Klíč] rozšiřuje Funkce ? nikdy : Klíč]: T[Klíč]
>;

Pěkná utilita pro použití například v serializacích. Ještě jednou děkuji!

Líbí se mi komentář:

1 To se mi líbí tlačítko Komentář

Pro další akce můžete zvážit zablokování této osoby a/nebo nahlášení zneužití

Přečtěte si další

Generování kódu s umělou inteligencí: Revoluční vývoj

JUnit Testing: Komplexní průvodce testováním jednotek v Javě

Nějaký webový vývojář nebo designér na Lanzarote? Příští týden se chystám na pokec a kávu (PDC nebo Arrecife) ☕️

Mads Stoumann – 8. prosince

Přečtěte si více
Jak přezimují jahody v květináči?

Typy: char a boolean

Ricardo Caselati – 9. prosince

Daný objekt obj a pole strings paths, Lodashova funkce pick() vrátí nový objekt se všemi klíči v obj, které jsou ne v cestách. omit() je opakem Lodashovy funkce pick().

const obj = < name: 'Will Riker', rank: 'Commander', age: 29 >; const newObj = _.omit(obj, ['rank', 'age']); newObj === obj; // false newObj.name; // 'Will Riker' newObj.rank; // undefined newObj.age; // undefined

omit() nevyvolá žádné chyby, pokud se pokusíte vynechat cesty, které neexistují.

const obj = < name: 'Will Riker', rank: 'Commander', age: 29 >; // Works fine even though 'something else' isn't a path in `obj` const newObj = _.omit(obj, ['rank', 'age', 'something else']); newObj === obj; // false newObj.name; // 'Will Riker' newObj.rank; // undefined newObj.age; // undefined

Tečkované cesty

Stejně jako pick() , omit() podporuje tečkované cesty a další syntaxe, které Lodashova funkce get() podporuje. Můžete vynechat vlastnosti pod objekty a dokonce i jednotlivé prvky pole.

const obj = < name: < first: 'Will', last: 'Riker' >, rank: 'Commander', ships: ['USS Enterprise', 'USS Pegasus'], age: 29 >; const newObj = _.omit(obj, ['name.first', 'age', 'ships.1']); newObj === obj; // false newObj.name.first; // undefined newObj.name.last; // 'Riker' newObj.rank; // 'Commander' newObj.ships; // ['USS Enterprise',] Note that index 1 is an array hole newObj.age; // undefined

Alternativy Vanilla JS

Pokud vše, co chcete udělat, je vynechat některé klíče nejvyšší úrovně z objektu, možná nebudete potřebovat Lodash. Existuje několik způsobů, jak replikovat omit() bez Lodashe, s výjimkou tečkovaných cest a dalších pokročilých funkcí.

Nejvýstižnějším způsobem je použití anonymní funkce šipky v kombinaci s operátorem spread následovně.

const obj = < name: 'Will Riker', rank: 'Commander', age: 29 >; // Looks tricky, but the idea is that you're calling an anonymous arrow // function that uses the spread operator to get all properties _other than_ // `rank` and `age`. const newObj = (( ) => rest)(obj); newObj === obj; // false newObj.name; // 'Will Riker' newObj.rank; // undefined newObj.age; // undefined

Výše uvedený přístup je stručný, ale obtížně čitelný, zejména pro začátečníky. Můžete také implementovat krátkou pomocnou funkci následovně.

function omit(obj, keys) < const ret = <>; keys = new Set(keys); const keysToCopy = Object.keys(obj).filter(key => !keys.has(key)); for (const key of keysToCopy) < ret[key] = obj[key]; >return ret; >

Přišel vám tento návod užitečný? Poděkujte hvězdičkou našeho repozitáře na GitHubu!

Další výukové programy Lodash

  • Lodashova funkce cloneDeep().
  • Kapitalizujte první písmeno řetězce pomocí Lodash
  • Odstraňte null z pole pomocí Lodashe
  • Najděte objekty podle vnořených vlastností pomocí Lodash
  • Pomocí Lodash zkrátit
  • Jak odstranit null z objektu pomocí Lodash
  • Funkce Different() v Lodash

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button