Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
This repository was archived by the owner on May 8, 2021. It is now read-only.
/ts-getPublic archive

Alternative to lodash.get that makes it typed and cool as if optional typing proposal is there (deprecated, use ts-optchain, or real optional chaining)

License

NotificationsYou must be signed in to change notification settings

RIP21/ts-get

Repository files navigation

npm versionBuild Statuscodecov

Archived. Use optional chaining instead :)

Alternative tolodash.get that makes it typed and cool as if optional chaining proposal is there.

Means you're not only safely navigate object, but you're also getting 100% autocomplete and type-safeness 🎉

Important comment from the author :)

Please, be aware of how this is working, and take a look limitations below, this is good to get only primitive values not an objects! (at least without generics/castings etc, which makes no sense and you can use lodash then). You better usets-optchain if browsers your are supporting, have Proxy support. If not, usets-optchain anyway but with typescript transformer or babel-plugin that you can find in their docs.More than that,optional chaining proposal has moved to Stage 3 recently, meaning it will be in TS very soon (version 3.7.0 to be precise)

This was nice experiment, but performance limitations oftry catch and problems with type inference if object is accessed is making this thing dangerous and not as cool as I thought when I wrote it initially and started using it 😇

Usage and examples

importgetfrom'ts-get'typeSomeType={optionalField?:stringnested?:{dangerousAccess?:string}}|undefined|nullconstemptyObject:SomeType={}constwithOneOptionalField:SomeType={optionalField:"value",}get(emptyObject,it=>it.optionalField,"default")// -> "default"get(withOneOptionalField,it=>it.optionalField,"default")// -> "value"get(withOneOptionalField,it=>it.nested.dangerousAccess,"default")// -> "default"get(withOneOptionalField,it=>it.unknownField,"default")// -> Type error, `unknownField` doesn't exist on typeget(withOneOptionalField,it=>it.optionalField,5)// -> Type error, third argument is not assignable to type `string`

Difference withlodash.get behavior

  • If your path getsnull at the end, it will bail out todefaultValue orundefined.If you would like to getnull returned anyway, just pass it as adefaultValue

Known issues/limitations:

  • If your type field is of typenull and onlynull orundefined your field will be of type{}[].I have no idea how to fix it 🤷‍♂️ PR Welcome 😇🙏
typeA={field:null|undefined// -> {}[] inside of the callback and as return type too}
  • If you return not a primitive but an object, all its nested fields will beRequired e.g. allundefined andnull will be removed.
importgetfrom'ts-get'typeA={field?:{optional?:string|null}}constinput:A={}constres=get(input,it=>it.field)res// <== Will be inferred as { optional: string }, without null and ? (undefined) which is wrong, but seems to be impossible to infer.

You can solve this issue passing down generics implicitly

importgetfrom'ts-get'typeA={field?:{optional?:string|null}}constinput:A={}constres=get<A,A['field']>(input,it=>it.field)res// <== Will be inferred properly

About

Alternative to lodash.get that makes it typed and cool as if optional typing proposal is there (deprecated, use ts-optchain, or real optional chaining)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp