我有一個需要兩種型別的函式。
handleDragging(e: CustomEvent<SelectionHandleDragEventType | GridHandleDragEventType>) {
e.stopPropagation();
const newValue = this.computeValuesFromPosition(e.detail.x, e.detail.y, e.detail.variant);
// other same code
})
問題是GridHandleDragEventType沒有 avariant作為型別的一部分。在這些情況下,我不介意發送null,但我不斷收到 TS 問題:
Property 'variant' does not exist on type 'GridHandleDragEventType'.有沒有一種干凈的方法來解決這個問題?
uj5u.com熱心網友回復:
您可以嘗試其中一種方式,我會選擇 Partial 的方式,但由于您需要 variant 屬性,您可以使用第二種方式。
e: CustomEvent<SelectionHandleDragEventType | Partial<GridHandleDragEventType>>
要么
e: CustomEvent<SelectionHandleDragEventType | GridHandleDragEventType & {variant: null}>
uj5u.com熱心網友回復:
這是一個利用TypeScript 的結構型別來{ detail: { x: number, y: number, variant?: string } }代替SelectionHandleDragEventType | GridHandleDragEventType.
我假設xand yare numberand variantis string- 如果這些不是這些屬性的實際型別,您應該能夠更改此示例:
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);
})
正如您所提到的,這也默認variant為nullfor GridHandleDragEventType,但您不一定需要 ifcomputeValuesFromPosition處理variant引數為undefined。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433045.html
標籤:javascript 打字稿
