# 装饰器组件类型

在某些情况下,你想在 @Component 装饰器参数中的函数上使用组件类型。 例如,要访问监听函数中的组件方法:

@Component({
  watch: {
    postId(id: string) {
      // To fetch post data when the id is changed.
      this.fetchPost(id) // -> Property 'fetchPost' does not exist on type 'Vue'.
    }
  }
})
class Post extends Vue {
  postId: string

  fetchPost(postId: string): Promise<void> {
    // ...
  }
}

上面的代码产生类型错误,显示监听函数中不存在 fetchPost。 发生这种情况是因为 @Component 装饰器参数中的此类型是基本Vue类型。

要使用你自己的组件类型(在本例中为Post),可以通过装饰器的 type 参数对其进行注释。

// Annotate the decorator with the component type 'Post' so that `this` type in
// the decorator argument becomes 'Post'.
@Component<Post>({
  watch: {
    postId(id: string) {
      this.fetchPost(id) // -> No errors
    }
  }
})
class Post extends Vue {
  postId: string

  fetchPost(postId: string): Promise<void> {
    // ...
  }
}