三种书写方式

  1. export default{}传统方式
  2. TS export default class Options extends Vue方式,需要@Component
  3. JS export default class Options extends Vue方式

    基本格式

    ```javascript import Vue from ‘vue’; import {Component} from ‘vue-property-decorator’;

@Component //声明下方为vue组件,然后进行自动处理为传统的js export default{}形式 export default class Options extends Vue { type = ‘-‘;

selectType(type: string) { if (type !== ‘-‘ && type !== ‘+’) { throw new Error(‘type in options is error!’); } this.type = type; }

  1. <a name="OsZVn"></a>
  2. ## 使用prop传递数据
  3. ```javascript
  4. @Prop(Number) xxx: number | undefined;
  5. // Prop告诉Vue 此数据为props而不是data
  6. // 前面告诉Vue xxx为Number,后面告诉tsc为number | undefined
  7. @Prop(Number) propA相当于js语法

举例:

  1. import Vue from 'vue';
  2. import {Component, Prop} from 'vue-property-decorator';
  3. @Component //声明下方为vue组件,然后进行自动处理为传统的js export default{}形式
  4. export default class Options extends Vue {
  5. type = '-';
  6. @Prop(Number) xxx: number | undefined;
  7. selectType(type: string) {
  8. if (type !== '-' && type !== '+') {
  9. throw new Error('type in options is error!');
  10. }
  11. this.type = type;
  12. }

优点

  1. 提示:父组件传子组件时,子组件已经写好,父组件可以直接提示xxx
  2. 编译报错:this.xxx.yyy会提示,1.xxx可能是undefined,2.xxx没有yyy这种方法
  3. 类型检查:检查是否为对应的类型

    类型声明

    创建一个形如custom.d.ts的类型定义文件,可以做如下声明
    1. type TagListModel = {
    2. data: TagType[];
    3. get: () => TagType[];
    4. set: () => void;
    5. create: (name: string) => 'success' | 'duplicate';
    6. update: (id: string, name: string) => 'success' | 'duplicate' | 'notFound';
    7. remove: (id: string) => void;
    8. }