#typescript #vue.js #vuejs3
#typescript #vue.js #vuejs3
Вопрос:
Я пытаюсь использовать vue-toast-уведомление в моем проекте vue 3. Проблема, с которой я сталкиваюсь, заключается в увеличении типов vue. Я видел другие ответы и применил, но у меня это не работает, вот ошибка
TS2339: Property '$toast' does not exist on type 'Vue<unknown, {}, {}>'.
Мой компонент тестирования, из которого я пытаюсь вызвать метод toast
import { Vue } from "vue-class-component";
export default class Login extends Vue {
private StoreID = "";
private StorePassword = "";
private errorMessage = "";
testToast(e)
{
e.preventDefault();
const vm = new Vue()
console.log(vm.$toast)
}
}
Мой файл Tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"importHelpers": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"noImplicitAny": false,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"baseUrl": ".",
"types": [
"webpack-env"
],
"typeRoots": [
"node_modules/@types",
"typings/vue.d.ts"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
],
"exclude": [
"node_modules"
]
}
Мой vue.d.ts внутри папок typings . папка typings создается в корне проекта, где существует файл main.ts.
// 1. Make sure to import 'vue' before declaring augmented types
import Vue from 'vue'
import VueToast from 'vue-toast-notification';
// 2. Specify a file with the types you want to augment
// Vue has the constructor type in types/vue.d.ts
declare module 'vue/types/vue' {
// 3. Declare augmentation for Vue
interface Vue {
$toast: VueToast
}
}
Ответ №1:
Установите последнюю версию с помощью
npm install --save vue-toastification@next
Затем попробуйте добавить следующий код в main.ts
import { createApp } from 'vue'
import App from './App.vue'
import Toast from 'vue-toast-notification';
declare module '@vue/runtime-core' {
interface ComponentCustomProperties {
$toast: Toast
}
}
let app=createApp(App)
app.use(Toast,{})
app.mount('#app')
Комментарии:
1. я попробовал вышеописанное, и ошибка исчезла, и рендеринг прошел успешно, но в консоли браузера я выдал сообщение об ошибке
2. index.min.js?b079:1 Неперехваченная ошибка типа: не удается установить свойство ‘$toast’ неопределенного значения в Object.a.install (index.min.js?b079:1) в Object.use (runtime-core.esm-bundler.js?5c40:2948) при оценке (main.ts?bc82:34) в модуле ../src/main.ts (app.js: 1381) в webpack_require (app.js: 849) в fn (app.js: 151) в Object.1 (app.js: 1598) в webpack_require
3. Как я уже сказал, этот компонент не поддерживает vue3