void 类型不能赋值给 undefind 类型的解决办法

问题描述

在使用 zustand进行状态管理时,有时候需要将状态方法绑定到html元素上,但是这样会报错

不能将类型“void”分配给类型“DragEventHandler<HTMLDivElement> | undefined

image-20230824225546853

观察代码

  • ts
export const useDragNodeStore = create<DragNodeState>()
(
    immer((set, get) => ({
        setDragNodeState(nodeName) {
            this.name = nodeName
        },
    }))
)
  • tsx
<div onDragStart={setNodeName('0')} draggable>OnPluginEnter</div>

可以发现方法 setDragState 是一个无返回值的方法,在 TS 中,无返回值记为 void,但是在 JS中(或者在上图所在的方法中) 无返回值记为 undefind,因此出现类型不匹配情况。

解决方式1

<div onDragStart={() => setNodeName('0')} draggable>OnPluginEnter</div>

setNodeName包裹在一个方法里,使得整个方法返回 undefind

感觉挺离谱的 凸(艹皿艹 )

参考资料

知识共享许可协议
void 类型不能赋值给 undefind 类型的解决办法Wantz 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
上一篇
下一篇