I have a function that takes 2 types.
handleDragging(e: CustomEvent<SelectionHandleDragEventType | GridHandleDragEventType>) {
e.stopPropagation();
const newValue = this.computeValuesFromPosition(e.detail.x, e.detail.y, e.detail.variant);
// other same code
})
the issue is that GridHandleDragEventType
does not have a variant
as part of the type. In those cases, I don't mind sending null
but I keep getting the TS issue:
Property 'variant' does not exist on type 'GridHandleDragEventType'.
Is there a clean way to resolve this?
CodePudding user response:
You can try one of the either way, I would go with the Partial one but as you need the variant property you can use the 2nd.
e: CustomEvent<SelectionHandleDragEventType | Partial<GridHandleDragEventType>>
or
e: CustomEvent<SelectionHandleDragEventType | GridHandleDragEventType & {variant: null}>
CodePudding user response:
Here's an example that takes advantage of TypeScript's structural typing to use { detail: { x: number, y: number, variant?: string } }
instead of SelectionHandleDragEventType | GridHandleDragEventType
.
I'm assuming that x
and y
are number
and variant
is string
- if those aren't the actual types of those properties, you should just be able to change this example:
handleDragging(e: CustomEvent<{ detail: { x: number, y: number, variant?: string } }>) {
e.stopPropagation();
const newValue = this.computeValuesFromPosition(e.detail.x, e.detail.y, e.detail.variant ?? null);
})
This also defaults variant
to null
for GridHandleDragEventType
, as you mentioned, but you don't necessarily need that if computeValuesFromPosition
handles the variant
parameter being undefined
.