如何导入具有正确类型的 Vue 类组件?

2024-04-04

例如,如果我有一个单文件 Vue 类组件:

// MyComponent.vue
<template>
  <div></div>
</template>

import Vue from 'vue'
import Component from 'vue-class-component'

@Component({
})
export default class MyComponent extends Vue {
  public message: string = 'Hello!'
}

我将它导入到其他地方,并获取它的一个实例。

import MyComponent from "./MyComponent.vue";
...
const foo = ... as MyComponent;
foo.message = "goodbye";

使用标准 Vue CLI 3 设置会出现错误,因为它包含shims-vue.d.ts包含以下内容:

declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}

据我了解,这意味着每当你写import Foo from "./Foo.vue", then Foo只是一个别名Vue,并且您将无法访问其成员。

如果您从以下位置导入,情况似乎确实如此.ts文件。如果您导入自.vue文件,它神奇地起作用了!

不幸的是我所有的测试都是.spec.ts文件,所以我无法导入任何组件的类型。这使得测试变得困难。有没有什么办法解决这一问题?


我在 Vue 2 和 Vue 3 项目中的做法如下:

  1. 创建 Foo.vue 文件并将 script 标签添加到 Foo.vue.ts 文件中。这是片段。

    <template>
       <div>... Your template code here ...</div>
    </template>
    
    <script lang="ts" src="./Foo.vue.ts" />
    
  2. 在 Foo.vue.ts 文件中编写组件代码。

import Vue from 'vue'
import Component from 'vue-class-component'

@Component({
})
export default class MyComponent extends Vue {
  public message: string = 'Hello!'
}
  1. 现在你可以使用as关键词。
import MyComponent from "./MyComponent.vue";
...
const foo = obj as MyComponent;
foo.message = "goodbye";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何导入具有正确类型的 Vue 类组件? 的相关文章

随机推荐

  • jhipster 使用 prod 配置文件运行嵌入式 jar - liquibase 问题

    我已经将我的应用程序打包为 mvn Pprod 包 然后我跑了 java jar myapp 0 0 1 SNAPSHOT war 效果很好 但如果我跑 java jar myapp 0 0 1 SNAPSHOT war spring pr
  • 检测 DOM 中的变化

    我想在 html 中添加一些 div 或输入时执行一个函数 这可能吗 例如 添加一个文本输入 然后应该调用该函数 迄今为止的终极方法 代码最少 IE11 FF Webkit Using 变异观察者 https developer mozil
  • 如何消除警告LNK4221?

    我正在使用 c windows 表单 Visual Studio 2010 开发一个项目 我们有 4 个项目 1 个包含 GUI Windows 窗体 托管代码 的项目 这是 exe 项目 其他3个项目 非托管代码 并且都是静态库 在这 4
  • Java中易失性变量和普通变量的显示区别

    我正在尝试创建一个示例来显示易失性变量和常用变量之间的区别 例如 package main public class TestVolatile extends Thread public int l 5 public volatile in
  • UITableView reloadData 不重新加载

    我很困惑为什么 reloadData 不重新加载 tableview 它不调用numberOfRowsInSection The fetchedResultsController将新数据保存到核心数据后确实获得新行 在将新数据添加到表视图之
  • Java - 易失性的使用仅在多处理器系统中有意义?

    易失性的使用仅在多处理器系统中才有意义 这是错误的吗 我正在尝试学习线程编程 所以如果你知道任何好的文章 pdf 我喜欢提到一些关于操作系统如何工作的东西 而不仅仅是语言的语法 否 挥发性可用于多线程应用程序 它们可能会也可能不会在多个处理
  • 将 javascript 字符串转换为 html 对象 [重复]

    这个问题在这里已经有答案了 我可以将字符串转换为 html 对象吗 喜欢 string s div div var htmlObject s toHtmlObject 这样我以后就可以通过 id 获取它并对其样式进行一些更改 var ho
  • 如何在CKEditor激活时在HTML5文本区域中显示占位符属性?

    我在 HTML5 网站中有一个文本区域 具有适当的占位符 示例文本 属性 在我通过 CKEditor 添加 RichText 支持之前 它显示得很好 CKEditor GUI 正在重新创建文本区域 并且不显示其中的占位符文本 有没有办法在
  • 使用foreignObject使用D3js动态添加SVG

    working
  • 如何将文本放入可绘制对象中?

    我正在尝试动态创建一个可绘制对象 以用作自定义线性布局的背景 它需要有哈希标记之类的 没什么大不了的 而且还需要有数字来标记哈希标记的内容 就像一把尺子 我知道我可以创建文本元素并将它们放入线性布局中 然后将哈希标记放入可绘制对象中 但我希
  • extjs 树面板上下文菜单不起作用

    var menu1 new Ext menu Menu items text Open in new tab var treePanel Ext create Ext tree Panel id tree panel region cent
  • ASP.NET MVC 3 使用身份验证

    如何使用 FormsAuthentication 保存某些内容 我不想通过 URL 存储用户 ID 例如 现在我有这样的代码 UserController class HttpPost public ActionResult LogOn L
  • 如何使用 PHP 打破外循环?

    我正在寻找打破 PHP 中的外部 for foreach 循环 这可以在 ActionScript 中完成 如下所示 top for each var i MovieClip in movieClipArray for each var j
  • 使用反应钩子 getSnapshotBeforeUpdate

    如何使用 React hooks 实现 getSnapshotBeforeUpdate 提供的相同逻辑 根据React Hook 常见问题解答 https reactjs org docs hooks faq html do hooks c
  • 为什么 python docker 镜像这么大(~750 MB)?

    My Dockerfile FROM python 3 onbuild CMD python test py test py print hello world 构建图像 docker build t my test app docker
  • 如何渲染模板和布局?

    在控制器方法中 如何渲染模板和布局 Like so def new render template gt devise invitations new layout gt application unauthorized2 t2 end r
  • VS2010中关闭双击取消停靠

    我总是不小心双击 VS2010 中的选项卡并取消停靠它们 是否可以关闭此行为 注意 我正在使用 Productivity Power Tools 中的 Document Well 2010 Plus 以防产生影响 在文档选项卡上找到它以及高
  • 重命名实体框架 T4 模板生成的类名称?

    我有一个包含大量表的数据库 不幸的是这些表的命名没有任何标准约定 表名 另一个表名 还有另一个表名 垃圾表 我使用实体框架和标准 T4 代码生成模板在 C 中创建 POCO 类 是否有我可以遵循的最佳实践 让我可以合并自己的约定 在 C 应
  • Excel - VLOOKUP 与 INDEX/MATCH - 哪个更好?

    我了解如何使用每种方法 VLOOKUP or HLOOKUP vs INDEX MATCH 我寻找它们之间的差异不是出于个人喜好 而是主要在以下方面 是否有一种方法可以做到而另一种方法不能做到的事情 一般来说 哪一种更有效 或者取决于具体情
  • 如何导入具有正确类型的 Vue 类组件?

    例如 如果我有一个单文件 Vue 类组件 MyComponent vue