# 属性类型定义

有时,你必须要在类组件之外定义属性和方法。例如,Vue 的官方状态管理仓库 Vuex (opens new window) 提供了 mapGettersmapActions 辅助器,将 store 中的属性和方法映射到组件中去。 这些辅助器需要在组件选项对象中使用。

即使在这种情况下,您也可以将组件选项传递给 @Component 装饰器的参数。 但是,当它们在 runtime 时运行时,它不会在类型级别自动声明属性和方法。

你需要在类组件中手动声明其类型:

import Vue from 'vue'
import Component from 'vue-class-component'
import { mapGetters, mapActions } from 'vuex'

// Interface of post
import { Post } from './post'

@Component({
  computed: mapGetters([
    'posts'
  ]),

  methods: mapActions([
    'fetchPosts'
  ])
})
export default class Posts extends Vue {
  // Declare mapped getters and actions on type level.
  // You may need to add `!` after the property name
  // to avoid compilation error (definite assignment assertion).

  // Type the mapped posts getter.
  posts!: Post[]

  // Type the mapped fetchPosts action.
  fetchPosts!: () => Promise<void>

  mounted() {
    // Use the mapped getter and action.
    this.fetchPosts().then(() => {
      console.log(this.posts)
    })
  }
}