Vue-toastification — увеличение типов в vuejs 3 с помощью typescript не работает

#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