Как удалить расширение .vue из импорта при использовании TypeScript в 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 или чем-то еще?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
14
0
1 993
6

Ответы 6

Эта строка import HelloWorld from '@/components/HelloWorld'; должна быть import HelloWorld from '@/components/HelloWorld.vue.

Потому что компилятор думает, что @/components/HelloWorld - это файл .ts или .js, но его не существовало.

я сказал то же самое в своем вопросе. вот почему я спрашиваю "как удалить расширение .vue"

Andre12 28.10.2018 17:51

Некоторое время назад я изучал ту же проблему; единственный ответ, который я нашел в нескольких местах: нельзя. Сохраните расширение .vue. В любом случае не имеет большого значения

MarcRo 14.09.2019 22:51

Это уже старый вопрос, но кажется, что вам нужно добавить shim-vue.d.ts

//shims-vue.d.ts

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

Подробнее см. Здесь: Что делает файл shims-tsx.d.ts в проекте Vue-Typescript?

В корневой папке источников у вас, вероятно, есть файл с именем shims-vue.d.ts с таким содержимым:

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

Этот файл сообщает компилятору Typescript, что все файлы, оканчивающиеся на .vue, имеют тип Vue. В противном случае эти файлы не имеют типа, и Typescript не сможет с ними работать.

Вот почему вы необходимость расширение .vue: если вы удалите его, Typescript не знает тип файла и не сможет скомпилировать. Короче говоря, ответ таков: ты не можешь удаляет расширение.

Более продвинутый ответ:

Теоретически вы жестяная банка удаляете расширение, но вам нужно будет объявить прокладку модуля с другим выражением. Например, вы можете сообщить Typescript, что все файлы в папке имеют тип Vue. Однако это намного хуже, чем просто использовать расширение .vue, которое рекомендуется по умолчанию.

Верно, чтобы добавить .vue в конце каждого компонента vuejs при импорте.

`import HelloWorld from '@/components/HelloWorld';

должно быть:

 import HelloWorld from '@/components/HelloWorld.vue'

вопрос спрашивает "как удалить расширение .vue"

Andre12 25.08.2020 17:14

Вам необходимо установить пакет awesome-typescript-loader, затем вы сможете импортировать файлы без расширения .vue. Если вы используете компонент SCF, как и вы, убедитесь, что у вас установлен пакет vue-loader и файл shims-vue.d.ts.

Вы можете попробовать добавить этот код в shims-vue.d.ts, если у вас есть только файлы .vue в папке components.

declare module '@/components/*' {
    import Vue from 'vue'
    export default Vue
}

Другие вопросы по теме