两种方式:
- 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
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。