我有这个代码:
<select class="form-control" on:change={pathChanged}>
pathChanged
的签名为:
function pathChanged(event: { target: HTMLSelectElement }) {
当我使用npm run check
通过tsc
运行它时,我得到这个错误:
Error: Type '(event: { target: HTMLSelectElement; }) => void' is not assignable to type 'FormEventHandler<HTMLSelectElement>'.
Types of parameters 'event' and 'event' are incompatible.
Type 'Event & { currentTarget: EventTarget & HTMLSelectElement; }' is not assignable to type '{ target: HTMLSelectElement; }'.
Types of property 'target' are incompatible.
Type 'EventTarget | null' is not assignable to type 'HTMLSelectElement'.
Type 'null' is not assignable to type 'HTMLSelectElement'. (ts)
<select class="form-control" on:change={pathChanged}>
pathChanged
应该具有什么签名?
2条答案
按热度按时间vjhs03f71#
事件
target
没有你想象的那么具体,在这种情况下,我通常在函数中使用类型Assert来解决这个问题。虽然错误声明
currentTarget
应该正确键入,所以使用它也应该工作:如果事件具有比
Event
更具体的类型,例如MouseEvent
,则可以使用&
组合这些类型:gtlvzcf82#
我在输入类型
file
中执行了此操作: