fix(types): make assign
return type more accurate + add Assign
type
#142
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.
Tip
The owner of this PR can publish a preview release by commenting
/publish
in this PR. Afterwards, anyone can try it out by runningpnpm add radashi@pr<PR_NUMBER>
.Summary
Assign
type, which tries to be as accurate as possible.BuiltInType
utility type as a union type of all built-in types (including DOM-specific and NodeJS-specific types when possible).OptionalKeys
andRequiredKeys
utility types.CustomClassRegistry
Since there's no built-in way to differentiate a “plain object” type and a custom class instance type, I've added the
CustomClassRegistry
interface. Anyone can extend this in their project by using “declaration merging”:Now the
assign
function's return type won't suggest thatFooBar
instances were merged with. Check out this before-and-after example:BEWARE: Any class you add to
CustomClassRegistry
must not have identical properties as any other “plain object” types you ever plan to use, because as far as TypeScript is concerned, they are identical. This could lead to suboptimal result types.Related issue, if any:
Resolves #141 (cc @crishoj)
For any code change,
Does this PR introduce a breaking change?
Yes
Bundle impact
src/object/assign.ts
Footnotes
Function size includes the
import
dependencies of the function. ↩