typescript - 如何从 typescript 组件访问 Vue 原型(prototype)属性

标签 typescript vuejs2

我正在将我的 vuejs 应用程序迁移到 typescript 以获得更好的可维护性。这是我的问题:

我创建了一个 TokenService 来从本地存储中检索管理员的 token :

// 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

但是,当我尝试从用 typescript 编写的组件 AdminWorkerPage 访问 this.$tokenService 时,出现错误:TS2339: Property '$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 编写时,我没有问题。

我如何告诉编译器该属性存在于组件中?

最佳答案

您需要augment the Vue type :

// token-service.d.ts

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

declare module 'vue/types/vue' {
  interface Vue {
    $tokenService: TokenService
  }
}

关于typescript - 如何从 typescript 组件访问 Vue 原型(prototype)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798574/

相关文章:

vue.js - vue.js 2 中计算和挂载的主要区别是什么?

javascript - 从 Vue.js 中的文档元素获取值

angular - RXJS 运算符(operator)不使用 firebase

javascript - Laravel 和 Vue,vue-router 链接不工作

javascript - 如何将数组分配给状态变量?

javascript - 将 Angular 1 服务注入(inject) Angular 4

node.js - Laravel Mix : Update a Node. js 依赖

javascript - 如何在 Vue.js 2.0 中设置全局分隔符?

尝试使用 typescript 插入 css 规则时出现 CSSStyleSheet 类型问题

angular - 如何在 Typescript 类中创建 Angular 5 HttpClient 实例