Как получить доступ к свойству прототипа Vue из компонента машинописи - PullRequest
0 голосов
/ 16 декабря 2018

Я перевожу мое приложение vuejs на машинописный текст для лучшего обслуживания.Вот моя проблема:

Я создал TokenService для извлечения токена администратора из локального хранилища:

// token.service.js

/*
  Get the admin's token from localstorage.
  @return {object} The token
*/
getToken() {
  return localStorage.getItem("token")
}

Чтобы служба была доступна во всех компонентах без ее импортав каждом из них я добавил сервис к Vue.prototype:

// main.js

Vue.prototype.$tokenService = TokenService

Но когда я пытаюсь получить доступ к this.$tokenService из моего компонента AdminWorkerPage, написанного на машинописном тексте, я получаю ошибку: TS2339: Свойство '$ tokenService' не существует для типа 'AdminWorkerPage'.

// AdminWorkerPage.ts

import { Vue, Component, Prop } from 'vue-property-decorator'

@Component({})
export default class AdminWorkerPage extends Vue {

  broadcast(): Promise<void> {
    token: this.$tokenService.getToken() // <-- $tokenService used here !
    ...
  }
}

Но когда мой файл был написан в javascript, у меня не было проблем.

Как я могу сказать компилятору, что свойство существует в компоненте?

1 Ответ

0 голосов
/ 16 декабря 2018

Вам нужно увеличить тип Vue :

// token-service.d.ts

import Vue from 'vue'
import TokenService from '../path/to/token-service'

declare module 'vue/types/vue' {
  interface Vue {
    $tokenService: TokenService
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...