如何将Typescript与Vue.Js集成(2)

该语法是Vue 3的新语法。该语法在构建时考虑了TypeScript集成。因此,Composition API将提供更好的TypeScript支持,而且我认为您不必为了使用TypeScript而更改语法。如果要在Vue 2中使用此语法,则可以使用composition-api软件包。 Vue 3将于2020年初发布,目前处于(pre)Alpha版本。如果您有时间研究这种新语法,建议您开始使用它进行编码,以熟悉Vue 3。

但是,如果您希望在使用composition API之前等待正式发布,请查看最后可用的语法。

Class API

引入类API的主要目的是提供一种具有更好TypeScript推理支持的替代API。

要使用Class API语法,您将需要安装软件包vue-class-component(已随Vue CLI一起安装)。

然后使用以下语法创建Vue组件:

import Vue from 'vue'
import Component from 'vue-class-component'

@Component({
  props: {
    myProp: {
      type: String
    }
  }
})
export default class HelloWorld extends Vue {
  myData: {name: string} = {name: 'test'}

// computed are declared with get before a function
  get myComputed(): string {
    return this.myData.name
  }

created() {}

// methods are just functions
  myMethod(): boolean {
    return false
  }
}

您将很快习惯这种语法!

这种语法的一个优点是,您可以按功能重新组合 'methods' 和 'computed'(composition API也为此目的而构建)。

import Vue from 'vue'
import Component from 'vue-class-component'

@Component({})
export default class HelloWorld extends Vue {
  // Autocomplete functionality
  get computedRelatedToAutocomplete() {
    ...
  }
  methodRelatedToAutocomplete() {
    ...
  }

// Search Functionality
  get computedRelatedToSearch() {
  ...
  }
  methodRelatedToSearch() {
  ...
  }
}

Vue 2完全支持软件包vue-class-component。

我们可以做的另一项改进是使用软件包vue-property-decorator。 该软件包也由Vue CLI安装。

有了它,甚至道具也将在组件的定义内:

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

@Component
export default class HelloWorld extends Vue {
  // The props are defined here with the annotation @Prop()
  @Prop()
  private msg!: string;

myData: {name: string} = {name: 'test'}

// computed are declared with get before a function
  get myComputed(): string {
    return this.myData.name
  }

// methods are just functions
  myMethod(): boolean {
    return false
  }
}

缺点:Class API仍然不能与TypeScript完美配合,在Vue 3中将由Composition API代替。在Vue 3发布之后,我强烈建议您使用Composition API。

但是目前,这是我们最好的解决方案!从一种表示法更改为另一种表示法并不那么复杂。您可以一次更改一个文件,而仍然使用另一种语法运行其他文件。那就是我们从选项API更改为类API所做的。即使到了今天,我们仍然拥有带有选项API语法的旧文件(我们正在逐步迁移)。

实际上,您也可以同时使用Vue实现一个文件的TypeScript(如果将其添加到现有项目中)。您获取一个Vue文件,然后在script标签内添加lang =“ ts”。然后,修改组件以使用Class API并修复TypeScript发现的潜在错误。真的很简单!

技巧和小贴士

在Vue中输入道具

在您的项目中,您将要键入道具。确实,您为道具定义的类型应该是Vue类型中的一种。您可以使用布尔值,字符串,数组,但不能使用自制类型。

import Vue from 'vue';

type MySuperType = {
  name: string
  age: number
}

export default Vue.extend({
  props: {
    mySuperProps: {
      type: MySuperType, // Will not work
      required: true
    }
  }
})

您将需要使用另一种语法:

import Vue from 'vue';

type MySuperType = {
  name: string
  age: number
}

export default Vue.extend({
  props: {
    mySuperProps: {
      type: Object as () => MySuperType,
      required: true
    }
  }
})

在Vuex中使用Typescript

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d1f2cae7e1ff0394db06130d9801c385.html