两种形式:

  • extends写法(不应用装璜器) ---- 更贴近于vue语法
import Vue from 'vue'import MainHeader from './header.vue'import MainContent from './content.vue'interface User {  name: string,  age: number}export default Vue.extend({  components: {    MainHeader,    MainContent  },  props: {    testProps: {      type: Object as () => User    }  },  data () {    return {      show: false    }  },  methods: {    setShow (state: boolean): void {      this.show = state    }  },  computed: {    num(): number {      return this.count    },    name: {      // 须要标注有 `this` 参加运算的返回值类型      get(): string {        return this.item.n      },      set(val: string) {        this.item.n = val      }    }  }})
  • vue-property-decorator(装璜器语法) ---- 贴近类的写法
import { Vue, Component, Watch } from 'vue-property-decorator'interface KeyValue {  c: string  n: string}@Component({  components: {    MainHeader,    MainContent  }})export default class Test extends Vue {  // data  count: number = 1  item: KeyValue = {    c: '',    n: ''  }  // computed  get num(): number {    return this.count  }  get name(): string {    return this.item.n  }  // 留神,这里不能标返回值类型,就算写void也不行  set name(val: string) {    this.item.n = val  }  // watch  @Watch('count')  watchCount(newVal: number, oldVal: number): void {    console.log(newVal)  }  @Watch('item.n')  watchName(newVal: string, oldVal: string): void {    console.log(newVal)  }  @Watch('item', { deep: true })  watchItem(newVal: KeyValue, oldVal: KeyValue): void {    console.log(newVal)  }  // methods  reset(): void {    this.$emit('reset')  },  getKey(): string {    return this.item.c  }}