在Typescript数组中使用Vue.js img元素

f45qwnt8  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(201)

我使用Vue 2和Typescript,并且在types.ts文件中声明了一个类型:

export type SetupSliderType = {
  name: SetupSliderEnum;
  image: HTMLImageElement;
  title: keyof I18nMessages;
  component: Function;
}

这不会给我带来任何错误。
在我的RegisterSetup.tsx文件中,我声明了一个该类型的Array:

private slides: Array<SetupSliderType> = [
    {
      name: SetupSliderEnum.solutions,
      image: <img src={solutions_logo}/>,
      title: I18nMessages['account.register.side.subheading'],
      component: this.renderSlideSolutions
    },
]

Array块中的“image”行显示以下错误:
类型“VNode”缺少类型“HTMLimageElement”的以下属性:对齐、替换、边框、完成和其他309个.ts(2740)
类型。ts(13、3):所需类型来自此处在类型“SetupSliderType”上声明的属性“image”
对于这种语法,使用<img>元素的正确方法是什么?我做错了什么?

wvmv3b1j

wvmv3b1j1#

当你使用JSX/TSX创建一个元素时,你并不是在创建一个DOM元素,而是在创建一个对象,这个对象将被Vue.js(或React或类似的)在 * 以后 * 用来创建或更新一个DOM元素。正如错误消息所告诉你的,在你的例子中对象的类型是VNode,所以你应该在你的类型中使用VNode而不是HTMLInputElement

export type SetupSliderType = {
    name: SetupSliderEnum;
    image: VNode; // <================
    title: keyof I18nMessages;
    component: Function;
}

如果您真的想创建一个HTMLInputElement,您可以通过document.createElement来完成,但是当使用像Vue.js或React或类似的库时,这将是非常不寻常的。

相关问题