typescript在项目中的使用

本文介绍了如何在Webpack打包配置中使用VueCLI,包括设置入口文件、扩展处理文件类型、添加TS处理规则,以及在Vue项目中整合TypeScript、Vuex和axios的实践,涉及组件声明、props、状态管理等知识点。
webpack打包配置 --> vue-cli
// 1. entry: 打包入口文件
entry:{
	app:'./src/main.ts'
}
// 2. extensions: 用于处理尝试数据尾缀列表
// 面试时候会问: 如何在webpack新增一种处理类型文件
extensions:['.js','.vue','.json','.ts']
// 3.loaders-ts: 增加ts处理
rules:[
	{ 
	 test:/\.ts$/,
	 loader:'ts-loader',
	 options:{
		appendTsSuffixTo:[/\.vue$/]
		}
	}
]
ts配置文件

tsconfig.json

  • vue / vuex +typescript
<template>
 		<vueComponent />
</template>
<script>
	// 1. 定义组件的方式上 - extends
	// 1.1声明当前模块 Vue.component or Vue.extends
	import Vue from 'vue'
	const Component = Vue.extends({})
	// 1.2 全面拥抱面向对象
	import Component from 'vue-class-component'
	@Component({
		template:'<vueComponent />'
	})
	export default class myComponent extends Vue{
		message:string = 'Hello'
	}
	// 1.3 利用ts的额外补充模块declare ⇒ 实现独立模块声明,独立引用
	declare module '*.vue'{
		import Vue from 'vue'
		export default Vue
	}
	declare module '/typings/vuePlugin.d.ts'{
		interface Vue{
			myProps:string
		}	
	}
	// 4. props ⇒ 提供原地声明联合变量
	import {propType} from 'vue'
	interface custmPayload{
		str:string,
		number:number,
		name:string
	}
	const Component = Vue.extend({
		props:{
			name:string,
			success:{
				type:string
			},
			payload:{
				type:Object as propType<customPayload>
			},
			callback:{
				type: Object as propType<() => void>
			}
		}
	})
	// 5. computed 以及 method
	computed:{
		getMsg():string{
			return ...
		}
	},
	methods:{
		click():string{
 			return ...
		}
	}
	// 6. vuex接入ts
	// `vuex.d.ts` - ComponentCustomProperties
	import { ComponentCustomProperties } from 'vue'
	decalre module '@vue/runtime-core'{
		interface State{}
		interface ComponentCustomProperties{ 
			$store:Store<State>
		}	
	}
	// 7. api形式
	import {InjectionKey} from 'vue'
	import { createStore,Store } from 'vuex'
	export interface State{}
	export const key:InjectionKey<Store<State>> = Symbol()
	export const store = createStore<State>({ state:{ count:0 } })
	// main.ts
	import { store,key } from './store'
	app.use(store,key)
	// 使用方
	import { useStore } form 'vuex'
	import {key} form './store'
	export default {
		const store = useStore(key)
	}
	// 8. 类装饰器 vuex-class
	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();
			this.isLogin = this.login;
		}
	}
</script>
项目中实战
  • vue-shims.d.ts vue文件声明
	declare module '*.vue'{
		import Vue from 'vue'
		export default Vue
	}
  • 组件导入
@Components({
	components:{
		app1,
		app2
	}
})
export default class App extends Vue{
	mounted(){}
}
  • 命名空间
// store.d.ts
declare namespace StoreState{
	export interface app1{}
	export interface app2{}
}
  • axios
declare namespace Ajax{
	export interface AjaxResponse{
		data:AjaxResponse
	}
	export interface AjaxResponse{
		code:number;
		result:any;
		message?:string;
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值