Use interface instead of type to allow for declaration merging #1165
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.
📝 Description
This PR modifies a few
type
aliases in the declaration file to instead beinterface
s. As noted in #1164 , aninterface
can be augmented through declaration merging. This is important for consumers and third party plugins as it allows them to extend the built-in types.type
will not allow this merging behavior.This PR adjusts
ActionSchema
,EventSchema
,ServiceEvent
, andContextParentSpan
to all be interfaces instead of types. A few of these types also were intersections withThisType<Service<S>>
. In order to avoid breaking changes, theServiceEvents
type was adjusted to have theThisType<Service<S>>
instead so the type ofthis
will be available in the appropriate contexts for service schemas. TheServiceActionsSchema
type already includedThisType<Service<S>>
so a change there was unnecessary.A few additional unrelated changes were triggered due to prettier auto-formatting.
This PR supersedes and closes #1164 .
💎 Type of change
🚦 How Has This Been Tested?
I loaded the changed definition in a large repository of services and ran typescript type checking with no errors. Additionally, I augmented the
ActionSchema
type in a third party library successfully and was able to access the augmented types.🏁 Checklist: