-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Description
Describe the bug
mergeProps is a powerful tool, but the typing is a bit clunky.
Your Example Website or App
https://playground.solidjs.com/anonymous/f901c3ec-82cb-4fbf-bc81-6e6583c67b64
Steps to Reproduce the Bug or Issue
type Vector = [number, number];
type Props = { tuple: Vector };
const App = (props: Partial<Props>) => {
const merged = mergeProps({ tuple: [1, 1] }, props);
merged.tuple; // type is (number[] | Vector) & (number[] | Vector | undefined)
// ideally types would not become less narrow by using mergeProps
// typecasting works, but is clunky and not typesafe
const merged2 = mergeProps({ tuple: [1, 1] as Vector }, props);
merged2.tuple; // type is Vector
const merged3 = mergeProps({ tuple: [1, 1] as Vector }, props) as Props;
merged3.tuple; // type is Vector
// no type-error
const merged4 = mergeProps({ tuple: [1, 1, 1] }, props)
// no type-error
const merged5 = mergeProps({ tuple: [1, 1, 1] }, props) as Props
return <></>;
};Expected behavior
- ideally types would not become less narrow by using mergeProps and no additional typecasts would be needed
- original typing of props should be respected when merging props, or there is at least a typesafe way to enforce this.
Screenshots or Videos
No response
Platform
- OS: [e.g. macOS, Windows, Linux]
- Browser: [e.g. Chrome, Safari, Firefox]
- Version: [e.g. 91.1]
Additional context
No response
Metadata
Metadata
Assignees
Labels
No labels