我正在使用纯JavaScript和TypeScript作为预处理器与JSDoc相结合。在后端中(例如在使用NodeJS时),这基本上可以完美运行。
然而,当我将其与DOM对象一起使用时,情况会变得有点棘手。
例如:假设我有一个HTML输入字段,我捕获
这会导致TS警告:
到目前为止,我已经尝试了
我不想使用类型断言。相反,我想知道如何直接在函数注释中指定它,这样我就不必像这里建议的那样为每个
input
事件并想要使用e.target.value
访问输入的值:/**
* Log data on input
*
* @param {Event} e
*/
let handleEvent = function(e){
console.log(e.target.value);
};
document.getElementById("my-input").addEventListener("input", handleEvent);
这会导致TS警告:
如下所示: 现在我的问题是,正确的类型“EventTarget”上不存在属性“value”
@param
注释是什么?到目前为止,我已经尝试了
Event
,InputEvent
和HTMLInputElement
。我不想使用类型断言。相反,我想知道如何直接在函数注释中指定它,这样我就不必像这里建议的那样为每个
e.target.value
的出现单独设置@type
。
e
,实际上键入的字符会更少。对我而言,这并不像是一种变通方法,因为我明确声明了参数的类型。我能想到的唯一的“变通方法”就是访问this
而不是e
。尽管如此,我对这个解决方案感到非常满意 :) - NullDevtarget
取到本地一次。var target = /** @type {HTMLInputElement} */ (e.target);
但是这个&
解决方案与使用通用类型参数几乎相同(实际上,现在我想想,我不确定类型参数除了更简洁外还能提供什么),所以看起来很不错。 :-) - T.J. CrowderaddEventListener(handleEvent)
时不起作用。 假设我们想要使用target和originalTarget。 JSDoc在参数上输出此错误:类型“MouseEvent”的参数不能赋给类型“MouseEvent&{originalTarget:HTMLInputElement; target:HTMLInputElement;}”的参数。 在类型“MouseEvent”中缺少属性“originalTarget”,但在类型“{originalTarget:HTMLInputElement; target:HTMLInputElement;}”中需要。ts(2345) - fips