如何在vue中使用TS
通过官网可以了解到,在vue中使用ts只需要使用npm安装ts就好
在使用TS的vue中基础语法
要让 TypeScript 正确推断 Vue 组件选项中的类型,您需要使用 Vue.component
或 Vue.extend
定义组件,或者声明组件时你更喜欢基于类的 API,则可以使用官方维护的 vue-class-component 装饰器
import Vue from 'vue' import Component from 'vue-class-component' // @Component 修饰符注明了此类为一个 Vue 组件 @Component({ // 所有的组件选项都可以放在这里 template: '<button @click="onClick">Click!</button>' }) export default class MyComponent extends Vue { // 初始数据可以直接声明为实例的 property message: string = 'Hello!' // 组件方法也可以直接声明为实例的方法 onClick (): void { window.alert(this.message) } }
实战一:
<script lang="ts"> import { Component, Vue, Watch, } from 'vue-property-decorator'; import gamedownload from '@/common/components/download.vue'; @Component({ components: { gamedownload, }, }) export default class App extends Vue { giftList: any = {}; unAcquireCount: number = 0; showMask: Boolean = false; cdkey: string = ''; gameName: String = ''; gameIcon: String = ''; // 复制 copy() { const that = this; }; // 初始化列表 async initList() { const gameId = getUrlKey('gameId'); const response = await this.$requestApi.getGameGiftList(gameId); if (response.result == 1) { this.giftList = response.giftList; this.unAcquireCount = response.unAcquireCount; this.gameName = response.gameName.length > 6 ? response.gameName.substring(0, 6) + '..' : response.gameName; this.gameIcon = response.gameIcon; if (response.gameName) { ksBridge.setPageTitle({ title: `${response.gameName}福利礼包`, }); } } }; mounted() { this.initList(); ksBridge.on({ type: 'native_foreground', handler: this.initList, }); ksBridge.on({ type: 'native_reentry', handler: this.initList, }); } } </script> <style lang="less"> @import "./index.less"; </style>
实战二:
<script lang="ts"> require('./index.less') import { Component, Vue, Emit } from 'vue-property-decorator'; interface ruleItem{ title: string, desc: Array<string>, hasOpen?: boolean } @Component({}) export default class App extends Vue { ruleList: Array<ruleItem> = [ ]; triggerDesc(idx:number){ this.ruleList[idx]['hasOpen'] = !this.ruleList[idx]['hasOpen']; this.$forceUpdate(); } } </script>
注意:组件的属性不必放在data中,方法不必放在methods中