一、项目需要使用typeScript
1、引入和使用
webpack 打包配置 => vue-cli init/create ${myProject} ${template} => 配置webpack => 主要是因为ts为编译时执行语言
- a. entry - 入口文件 main.ts
- b.extentions - 家还是那个ts 文件area - 用于处理尝试的数据尾缀列表
- c. loaders - ts-loader,增加对于ts的处理 => 工程化
2、TS配置
tsconfig.json
3、比如 vue / vuex + typescript 项目中
<template>
<div>
<vueComponent />
</div>
<script lang="ts">
import Vue from 'vue'
const Component = Vue.extend({
})
import Component from 'vue-class-component'
@Component({
tempalate: '<vueComponent />'
})
export default class myComponent extends Vue {
message:string = 'hello'
onClick():void {
console.log(this.message);
}
}
declare module '*.vue' {
import Vue from 'vue'
export default Vue
}
declare module '/typeings/vuePlugin.d.ts' {
interface Vue {
myProps: string
}
}
let vm = new Vue()
console.log(vm.myProps)
interface customPayload {
str:string,
number:number,
name:string
}
import { propType} from 'vue'
const Component = Vue.extend({
props:{
name:String,
success: {type:String},
payload:{
type: Object as propType<customPayload>
},callback:{
type:Function as propType<()=> void>
}
}
})
computed:{
getMsg():string {
return this.click() + '!'
}
}
methods: {
click():string{
return this.message + 'hello world'
}
}
import { ComponentCustomProperties} = from 'vue'
declare module '@vue/runtime-core' {
interface State {
count: number
}
interface ComponentCustomProperties {
$store: Store<State>
}
}
import {InjectionKey} from 'vue'
import {createStore, Store} from 'vuex'
export interface State {
count:number
}
export const key: InjectionKey<Store<State>> = $Symbol()
export const store = createStore<State>({
state:{
count:0
}
})
import {createApp} from 'vue'
import {store, key} from './store'
const app = createApp({
})
app.use(store, key)
app.mount('#app')
import { useStore} from 'vuex'
import {key} from './store'
export default {
const store = useStore(key)
store.state.count
}
import {State, Action, Getter} from 'vuex-class'
export default class App extends Vue {
@State login: boolean;
@Action setInit:() =>void;
get isLogin: boolean;
mounted(){
this.setInit()
}
}
</script>
</template>