webpack的打包配置:vue-cli webnpack 编译时
entry 入口 设置
entry: {
app: './src/maikn.ts'
}
vue/vuex + ts
import vue from 'vue'
const Compoinent = Vue.extend({
// 类型
})
import Component from 'vue-class-component'
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 'typings/vuePlugin.d.ts'{
interface Vue {
myProps: string
}
}
// 实例中使用
let vm = new Vue()
console.log(vm.myProps)
import { propType } from 'vue'
interface customPayload {
str: string,
number: number,
name: string
}
const Component = Vue.extend({
pros: {
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 + 'zhaowa'
}
}
// vuex.d.ts声明模块 - ComponentCustomProperties
declare module '@vue/runtime-core' {
interface State {
count: number
}
interface ComponemtCustomProperties {
$store: Store<State>
}
}
// store.ts - 状态机侧
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
}
})
// main.ts - 入口侧代码
import { createApp } from 'vue'
import { store, key } form './store'
const app = createApp({
// 参数
})
// 利用了provide。inject
app.use(store, key)
// => 传入injectionkey
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 defaulty class App extends Vue {
// 利用属性装饰器整合store的状态
@store login: boolean
// 利用事件装饰器整合store方法
@Action setInit: ()=> void
get isLogin: boolean
mounted() {
this.setInit()
this.isLogin = this.login
}
}