如何通过打字稿在Vue2中使用带有组合api的vue类组件

Posted

技术标签:

【中文标题】如何通过打字稿在Vue2中使用带有组合api的vue类组件【英文标题】:How to use vue class component with composition api in Vue2 by typescript 【发布时间】:2021-03-07 00:48:15 【问题描述】:
<script lang="ts">
import  Component, Vue  from 'vue-property-decorator'
import  CustomerContext, getCustomerRepository  from '@/composables/customerRepository'

@Component
export default class CustomerList extends Vue 
  search = ''

  setup(): CustomerContext 
    const ctx = getCustomerRepository()
    return ctx
  

</script>

在 Vue 2 中,我想通过 TypeScript 将 Composition API 与类组件样式一起使用,但我不确定我的语法是否正确。此外,setup() 函数没有被自动调用。

vue-class-component 可以在 TypeScript 中使用 Compostion API 吗?

【问题讨论】:

组合 API 是 Vue 3 @Daniel_Knights Vue 2 还通过插件支持 Composition API:@vue/composition-api 【参考方案1】:

Vue 2

首先,确保您已经为 Vue 2 安装了 @vue/composition-api 插件:

// main.ts
import Vue from 'vue'
import VueCompositionApi from '@vue/composition-api'

Vue.use(VueCompositionApi)

然后将setup() 定义为@Component 选项(不是作为类方法):

// MyComponent.vue
@Component(
  setup(props, context) 
    //...
  
)
export default class CustomerList extends Vue 
  //...

Vue 3

对于 Vue 3,vue-class-component@8.x 导出一个您将分配给局部变量的 setup() API:

<template>
  <div>counter: myContext.counter</div>
  <button @click="myContext.increment">Increment</button>
</template>

<script lang="ts">
import  Vue, setup  from 'vue-class-component'
import  ref  from 'vue'

export default class MyComponent extends Vue 
  myContext = setup(() => 
    const counter = ref(0)

    return 
      counter,
      increment() 
        counter.value++
      
    
  )

</script>

注意:截至vue-class-component@8.0.0-rc.1setup() 不接收任何参数,包括context and props arguments from the setup() used in the Options API。

【讨论】:

以上是关于如何通过打字稿在Vue2中使用带有组合api的vue类组件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用打字稿在 beforeEach 挂钩中安装 Vue 组件来干燥代码?

如何使用打字稿在reactjs中传递数据

如何使用打字稿在表格的单元格中动态插入锚标记?

如何使用打字稿在angular2中获取设备显示的高度和宽度?

使用打字稿在reduce方法中使用扩展语法进行解构

如何使用打字稿在 gulp-angular-generator 中定义指令