[英]Using Typescript with Laravel and Vue.js, imports not making it to Vue components?
[英]How to remove .vue extension from imports when using TypeScript in Vue.JS?
我用 vue-cli3 创建了一个项目并包含了 TypeScript
我的src/app.vue :
<template>
<div id="app">
<hello-world msg="test"/>
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@/components/HelloWorld';
@Component({
components: { HelloWorld },
})
export default class App extends Vue {}
</script>
编译器在“找不到模块‘@/components/HelloWorld’”中抛出错误;
组件 HelloWorld 存在。
但是,如果我删除lang="ts"
或添加.vue
扩展名,那么一切都可以正常编译。 在我的tsconfig.json 中,我有
"paths": {
"@/*": [ "src/*" ]
},
是tsconfig.json
还是其他问题?
在您的源根文件夹中,您可能有一个名为shims-vue.d.ts
的文件,其内容如下:
declare module '*.vue' {
import Vue from 'vue'
export default Vue
}
这个文件的作用是告诉 Typescript 编译器所有以.vue
结尾的文件都具有Vue
类型。 否则,这些文件没有类型,Typescript 无法使用它们。
这就是你需要.vue
扩展名的原因:如果你删除它,Typescript 不知道文件的类型并且无法编译。 因此,简而言之,答案是您无法删除扩展名。
更高级的答案:
从理论上讲,您可以删除扩展名,但您需要使用不同的表达式声明模块 shim。 例如,您可以告诉 Typescript 文件夹中的所有文件都具有 Vue 类型。 然而,这比仅仅.vue
扩展名更糟糕,这是推荐的默认值。
这已经是一个老问题了,但似乎您需要添加 shim-vue.d.ts
//shims-vue.d.ts
declare module "*.vue" {
import Vue from 'vue';
export default Vue;
}
可以在此处找到更多信息: shims-tsx.d.ts 文件在 Vue-Typescript 项目中有何作用?
你需要安装awesome-typescript-loader
包,然后你可以在没有.vue
扩展名的情况下导入。 如果你像你一样使用 SCF 组件,请确保安装了vue-loader
包和shims-vue.d.ts
文件。
如果您的components
文件夹中只有.vue
文件,您可以尝试将此代码添加到shims-vue.d.ts
declare module '@/components/*' {
import Vue from 'vue'
export default Vue
}
这一行import HelloWorld from '@/components/HelloWorld';
应该import HelloWorld from '@/components/HelloWorld.vue
。
因为编译器认为@/components/HelloWorld
是一个.ts
或.js
文件,但它并不存在。
.vue
时在每个 vuejs 组件的末尾添加.vue
是真的。
`import HelloWorld from '@/components/HelloWorld';
应该:
import HelloWorld from '@/components/HelloWorld.vue'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.