Vue&TypeScript:在项目目录外的TypeScript组件中实现导入时如何避免错误TS2345? [英] Vue&TypeScript: how to avoid error TS2345 when import implemented in TypeScript component outside of project directory?

查看:95
本文介绍了Vue&TypeScript:在项目目录外的TypeScript组件中实现导入时如何避免错误TS2345?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用侧组件(在项目目录之外)时出现以下 TypeScript 错误:

TS2345:类型'{模板:字符串;组件:{ SimpleCheckbox: typeof SimpleCheckbox;};}'不可分配给VueClass"类型的参数.对象字面量只能指定已知属性,类型中不存在模板"'VueClass'.

我的 WebStorm IDE 没有检测到这个错误;当我使用 TypeScript 加载器运行 Webpack 时,在控制台中输出了 in.

错误发生在:

import { Vue, Component, Prop } from 'vue-property-decorator';从'./SkipProjectInitializationStepPanel.pug'导入模板;从'./../../../../ui-kit-libary-in-development/UiComponents/Checkboxes/MaterialDesign/SimpleCheckbox.vue'导入SimpleCheckbox;@Component({ template, components: { SimpleCheckbox } })//这里!导出默认类 SkipProjectInitializationStepPanel 扩展 Vue {@Prop({ type: String, required: true }) private readonly text!: string;}

根据ui-kit-libary-in-development名称,这还不是npm-dependency,所以暂时不在node_modules里面.>

这完全是 TypeScript 错误;尽管 ts-loader 抛出了这个错误,但 Webpack 构建了我的项目并且编译的 JavaScript 工作正常.如果执行以下操作之一,此错误将消失:

  • SimpleCheckbox.vue 移动到与 SkipProjectInitializationStepPanel.ts 相同的目录,并将其导入为 import SimpleCheckbox from './SimpleCheckbox.vue';
  • @Component({ template, components: { SimpleCheckbox } }) 中移除 SimpleCheckbox 并只留下 @Component({ template, components: {} }) (当然,在这种情况下SimpleCheckbox不会被渲染,但证明问题不在SkipProjectInitializationStepPanel).
  • ui-kit-libary-in-development 移动到主项目的 node_modules 并从 ui-kit- 中删除 node_moduleslibary-in-development(如果不删除,什么都不会改变).

很遗憾,我无法重现此问题.由于某种原因,下面的复制尝试没有错误:

MainProject/src/Application.vue