Vue2 Vue-cli中使用Typescript的配置詳解
前言
因為最近公司的團(tuán)隊熱衷于vue框架,新項目想著練練typescript,于是開始了vue+ts的踩坑之路...本文意在為和我有一樣想法的伙伴們省去踩坑的時間,下面話不多說了,來一起看看關(guān)于Vue2 Vue-cli中利用Typescript需要的配置是什么吧。
一、初步配置
首先安裝官方插件vue-class-component,vue-property-decorator,配置webpack。
webpack配置如下:
修改入口文件
entry: {
app: './src/main.ts'
}
resolve部分:
extensions: ['.js', '.vue', '.json', '.ts', '.tsx']
配置loader
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
options: {
appendTsSuffixTo: [/\.vue$/],
}
}
配置tsconfig.json
{
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
],
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"allowJs": true,
"module": "es2015",
"target": "es5",
"moduleResolution": "node",
"experimentalDecorators": true,
"isolatedModules": true,
"lib": [
"dom",
"es5",
"es2015.promise"
],
"sourceMap": true,
"pretty": true
}
}
二、實戰(zhàn)!
配好配置只是第一步,在項目里跑起來才是王道。
在vue文件的script標(biāo)簽里添加lang='ts'
因為ts-loader不像配過loader的webpack一樣知道vue,html等文件是什么東西,你跑起來后會報模塊無法解析的錯誤,所以還需要配置.d.ts聲明文件
vue的如下配置
declare module "*.vue" {
import Vue from 'vue';
export default Vue;
}
你也可以為其它的非js模塊配置.d.ts文件如html(告訴ts-loader把html理解成字符串)
declare module "*.html" {
let template: string;
export default template;
}
配置好之后ts就能理解這些模塊了
從vue-property-decorator引入需要用到的模塊
(一般只用到Component, Vue, Watch, Prop這四個,其它3個沒用到也沒研究,知道的大佬可以解釋下。)
import { Component, Vue, Watch } from 'vue-property-decorator'
這里拿之前寫的sidbar的代碼當(dāng)個栗子:
class HoverTopElem {
leaveTop: number = -200
top: number = null
height: number = null
show(e) {
this.top = e.target.getBoundingClientRect().top
this.height = e.target.clientHeight
}
hidden() {
this.top = this.leaveTop
}
}
@Component({
name: 'sidebar',
template: template,
components: {
sidebarItem
}
})
export default class Sidebar extends Vue {
SidebarMenu: any = SidebarMenu
hoverTopElem: HoverTopElem = new HoverTopElem()
activeListItemName: string = null
activeRouteItemRoute: string = null
get _activeRouteItemRoute(): string {
return this.$route.path
}
@Watch('_activeRouteItemRoute', { immediate: true })
onRouteChanged(val: any) {
this.activeRouteItemRoute = val
}
changeList(param) {
this.activeListItemName = param
}
changeRoute(param) {
this.activeRouteItemRoute = param
}
}
元數(shù)據(jù)寫在@Component配置里,像名字,用到的組件啥的,然后說下之前vue里用到的各個實例屬性方法在這里怎么用:
data: 這個是最常用的,像上面的SidebarMenu(這里一共聲明了4個),注意這里聲明的變量一定要賦一個值,沒有就null,不能是undefined,不然這個數(shù)據(jù)就不是響應(yīng)的。因此HoverTopElem類里的屬性也是要有初始值,不然這些屬性也不是響應(yīng)的
computed: 這里就是get函數(shù),注意tsconfig.jsonp不配置"target": "es5"這里會報錯
prop: vue-property-decorator里面有Prop模塊,也可以在元數(shù)據(jù)聲明這個prop,然后在類里聲明一下這個變量就可以了,個人推薦第一種
watch: vue-property-decorator里的Watch模塊
methods: 方法像data一樣直接寫在類里就可以了(注意不要和周期鉤子同名)
各種生命周期鉤子: 直接寫就行
路由鉤子見vue-class-component文檔
至此,基本就可以像原來一樣寫vue組件了。
當(dāng)然如果要想和原來一樣寫ts,還需要配置tslint,不然一些ts語法不會被識別,像public修飾符之類的,因為ts還不是很熟練就沒想著配,有興趣的朋友可以試試。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
vue前端HbuliderEslint實時校驗自動修復(fù)設(shè)置
這篇文章主要為大家介紹了vue前端中Hbulider中Eslint實時校驗自動修復(fù)設(shè)置操作過程,有需要的朋友可以借鑒參考下希望能夠有所幫助2021-10-10
vue中使用 pinia 全局狀態(tài)管理的實現(xiàn)
本文主要介紹了vue中使用 pinia 全局狀態(tài)管理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
移動端Vue2.x Picker的全局調(diào)用實現(xiàn)
這篇文章主要介紹了移動端Vue2.x Picker的全局調(diào)用實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

