前端之路(拖更博主持续更新ing-12.16)-JavaScript项目转TypeScript项目的一些对比

本文介绍了如何将原始的Vue组件转换为TypeScript模板,详细展示了如何使用vue-property-decorator库来定义Props、计算属性、Vuex状态和方法,并且涉及到组件的生命周期钩子函数。同时,还涉及到了Vue组件中数据类型的安全性和Vuex的集成。
摘要由CSDN通过智能技术生成

原始模版

import {componentA,componentB} from '@/components';

export default {
    components: { componentA, componentB},
        //父组件向子组件传参props
        props: {
        propA: { type: Number },
        propB: { default: 'default value' },
        propC: { type: [String, Boolean] },
    }
    // 组件数据
    data () {
        return {
            message: 'Hello'
        }
    },

    watch: {
        visible(val) {
            if (val) {
                this.closed = false;
                this.$emit('open');
                this.$el.addEventListener('scroll', this.updatePopper);
                this.$nextTick(() => {
                    // this.$refs.dialog.scrollTop = 0;
                });
                if (this.appendToBody) {
                    document.body.appendChild(this.$el);
                }
            } else {
                this.$el.removeEventListener('scroll', this.updatePopper);
                if (!this.closed) this.$emit('close');
            }
        }
    }

    // 计算属性
    computed: {
        reversedMessage () {
            return this.message.split('').reverse().join('')
        }
        // Vuex数据
        step() {
            return this.$store.state.count
        }
    },
    methods: {
        changeMessage () {
            this.message = "Good bye"
        },
        getName() {
            let name = this.$store.getters['person/name']
            return name
        }
    },
    // 生命周期
    created () { },
    mounted () { },
    updated () { },
    destroyed () {}
}

转换成 TS 模版

import { Component, Vue, Prop } from 'vue-property-decorator';
import { State, Getter } from 'vuex-class';
import { count, name } from '@/person'
import { componentA, componentB } from '@/components';

@Component({
 components:{ componentA, componentB},
})
export default class HelloWorld extends Vue{
    @Prop(Number) readonly propA!: number | undefined
    @Prop({ default: 'default value' }) readonly propB!: string
    @Prop([String, Boolean]) readonly propC!: string | boolean | undefined

    // 原data
    message = 'Hello'

    // 计算属性
    private get reversedMessage (): string[] {
        return this.message.split('').reverse().join('')
    }

    // watch
    @Watch('visible')
    onVisibleChanged(val) {
        if (val) {
          this.closed = false;
          this.$emit('open');
          this.$el.addEventListener('scroll', this.updatePopper);
          this.$nextTick(() => {
            // this.$refs.dialog.scrollTop = 0;
          });
          if (this.appendToBody) {
            document.body.appendChild(this.$el);
          }
        } else {
          this.$el.removeEventListener('scroll', this.updatePopper);
          if (!this.closed) this.$emit('close');
        }
    }

    // Vuex 数据
    @State((state: IRootState) => state.booking.currentStep) step!: number
    @Getter( 'person/name') name!: name

    // method
    public changeMessage (): void {
        this.message = 'Good bye'
    },
    public getName(): string {
        let storeName = name
        return storeName
    }

    // 生命周期
    private created ()void { },
    private mounted ()void { },
    private updated ()void { },
    private destroyed ()void { }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值