Allow users to create type-safe/strictly typed feature flags with useFlags #151
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Requirements
Related issues
#139, launchdarkly/js-sdk-common#32
Describe the solution you've provided
This MR updates
useFlags
generics and definition to allow implementing codebases to specify their own strictly typed feature flag interface.By declaring
useFlags
asconst
and not afunction
it is not possible to overload its definition. Function overloads allow implementing codebases to re-declareuseFlags
to be more strict.Additionally, currently the generic on
useFlags
is set toextends LDFlagSet
, but this is not necessarily true. WhenuseCamelCaseFlagKeys
istrue
, the return value fromuseFlags
can differ fromLDFlagSet
ifLDFlagSet
has been augmented for the client.Describe alternatives you've considered
I also considered introducing a second interface,
ReactLDFlagSet
(or similar), which did not include an index type but this would not be backwards compatible and it seems like the goal is to have strict typing be opt-in.Open to other alternatives, in our codebase we've considered writing a wrapping function.
Additional context
Example codebase implementation using these changes: