![](/img/trans.png)
[英]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.