Vue TypeScript 项目中事件的类型是啥?

Posted

技术标签:

【中文标题】Vue TypeScript 项目中事件的类型是啥?【英文标题】:What is the type for an event in Vue TypeScript project?Vue TypeScript 项目中事件的类型是什么? 【发布时间】:2019-08-04 01:04:53 【问题描述】:

uploadImage 函数参数中“e”的正确类型是什么?

public uploadImage(e /* :type of e */)
 const image = e.target.files[0];
 const reader = new FileReader();
 reader.readAsDataURL(image);
 reader.onload = e =>
    this.previewImage = e.target.result;
    console.log(this.previewImage);
 ;

在模板中我有这个

<input type="file" accept="image/jpeg" @change=uploadImage>

【问题讨论】:

【参考方案1】:

类型只是Event。相关信息在e.target 属性上。

【讨论】:

【参考方案2】:

如果您将类型指定为Event,那么您将无法执行e.target.files[0];,因为TS 会抱怨Property 'files' does not exist on type 'target' error in typescript。最简单的解决方案是将其键入为any,在此处引用 shusson 的解决方案:Property 'files' does not exist on type 'EventTarget' error in typescript,但即使这对我也不起作用,所以我最终只是没有为特定的 Vue 组件使用 TS

【讨论】:

如果any 类型甚至不起作用,您可能试图使某些不起作用的东西起作用,可能有或没有类型。首先使用 any 是错误的,因为这样你就禁用了 Typescript 的优势。如果您打算这样做,更好的解决方案是(老实说)卸载 Typescript。【参考方案3】:

有不同类型的事件和类型。例如,您可以使用 DragEvent 类型进行拖动操作:https://developer.mozilla.org/en-US/docs/Web/API/DragEvent。 还有 InputEvent 用于输入。 :https://developer.mozilla.org/en-US/docs/Web/API/InputEvent. 事件更通用。

【讨论】:

以上是关于Vue TypeScript 项目中事件的类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MaterialUI 和 Typescript 在 React 中传递给 onKeyPressed 函数的事件的正确类型是啥?

如何使用严格类型的有效负载发出事件? | Vue 3 组合 API + TypeScript

基于 Vue 3 Typescript 的项目中的类型问题

Vue/Typescript:检查不是 HTMLInputElement 类型的属性

vue-type-check: Vue 模板中的 Typescript 类型检查

使用TypeScript创建Vue项目