Comments (1)
I believe that the following two problems need to be solved:
-
The type of the path should be fixed in a way that it traverses the whole target type, regardless of nullable keys.
-
The return type of
useProperty
should be either the type of the final fragment (e.g.SecurityData
when usinguseProperty('security')
) or a union ofundefined
and the type of the last fragment if there were any nullable keys in the chain (e.g.undefined|string
) when usinguseProperty('security.user.name')
.
For the first problem, I've come with the following solution:
--- a/packages/vue/src/composables/property.ts (revision 62d1293548e994cd2e997c6aa64e178526f54b9b)
+++ b/packages/vue/src/composables/property.ts (revision e5df3f34973aff49e94ca5dd521b565782abc98e)
@@ -41,10 +41,10 @@
type PathImpl<T, K extends keyof T> =
K extends string
- ? T[K] extends Record<string, any>
- ? T[K] extends ArrayLike<any>
- ? K | `${K}.${PathImpl<T[K], Exclude<keyof T[K], keyof any[]>>}`
- : K | `${K}.${PathImpl<T[K], keyof T[K]>}`
+ ? NonNullable<T[K]> extends Record<string, any>
+ ? NonNullable<T[K]> extends ArrayLike<any>
+ ? K | `${K}.${PathImpl<NonNullable<T[K]>, Exclude<keyof NonNullable<T[K]>, keyof any[]>>}`
+ : K | `${K}.${PathImpl<NonNullable<T[K]>, keyof NonNullable<T[K]>>}`
: K
: never
For the second problem, we'll need to find a way to make PathValue
return the correct type depending on the chain.
from hybridly.
Related Issues (16)
- useHead not working as documented HOT 2
- Missing documentation
- Demonstration video not working HOT 4
- Layout plugin doesn't support hyphen
- Layout plugin doesn't support sub-directories HOT 1
- Unused field appear on 2nd form when doing multiple form on single page HOT 1
- The registerHook function does not get unregistered automatically on unmount HOT 1
- useForm's errors inconsistent initial/empty state value
- `@vueuse/core` is included by default in `unplugin-auto-import`'s config, causing an error if it's not installed
- Form Errors Reactivity & Nested Fields Errors HOT 15
- Root Blade view is not resolved relative to the `architecture.root` path HOT 2
- Cannot build the docs because of dead links HOT 4
- Hybridly unregisters Laravel's default view folder HOT 5
- Document which `dirs` are included by default by `unplugin-vue-components`
- Dialogs get delayed due to view transitions HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hybridly.