使用 typescript 开发 vue 项目

本文详细解析了基于Vue的TypeScript项目结构,包括关键文件的作用及配置,并补充了TS语法要点,如计算属性、接口定义、装饰器和类型断言,帮助开发者深入理解并高效运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)文件目录解析

.
├── README.md
├── babel.config.js
├── package.json
├── public
│   ├── favicon.ico
│   └── index.html
├── src
│   ├── App.vue // 页面入口文件
│   ├── assets
│   │   └── logo.png
│   ├── components
│   │   └── HelloWorld.vue
│   ├── main.ts // 项目入库文件
│   ├── router.ts
│   ├── shims-tsx.d.ts // tsx 负责 tsx 的模块注入
│   ├── shims-vue.d.ts // 负责vue 的模块注入
│   ├── store.ts
│   └── views
│       ├── About.vue
│       └── Home.vue
├── tsconfig.json // ts的配置文件  ts最终会转化为js
├── tslint.json
└── yarn.lock

1. @vue/cli-plugin-typescript :这个插件 负责把 ts 编译成为 js

2. shims-vue.d.ts:用来支持 .vue 后缀的文件的生效 ts 本身是不支持vue的

    shims-tsx.d.ts:同理用来支持 .tsx 后缀文件的生效

(二)ts 语法补充(自己不会的记一下)

ts 的类与es6 的类大致相同,但是会多几个特性

1. 计算属性(原computed)

get 关键字:

<div>{{ count }}</div>
get count () {
  return this.moneyList.length
}

 把 moneyList 的数组长度实时监听

2. 接口(定义规范和约束)

定义了 upgradeList 的规范,注意接口书写位置 @Component 上面

如果类型不对,编译会报错

interface upgradeList {
  comboType: number
  condition: number
  conditionDesc: string
  desc: string
  downMoney: number
  levelId: number
  money: number
  name: string
  orderMaxCount: number
  promotionId: number
  type: number
  valid: boolean,
  comboId: number
}
private upgradeList:upgradeList[] = [] // 升级套餐列表

定义 upgradeList 数组,使用upgradeList的规范~

在项目中最常用的是 定义函数传参数的类型~

方法一:传递的参数先结构,再引用接口定义

interface paramsCheck {
  activityId: string,
  age: number
}

const getUserInfo = ( { activityId, age }: paramsCheck ):string => {
  return `activityId: ${activityId}, age: ${age}`
}

var res = getUserInfo({
  activityId: '23',
  age: 23
})

console.log(res)

方法二:不用接解构了

interface paramsCheck {
  activityId: string,
  age: number
}

const getUserInfo = (params: paramsCheck):string => {
  return `activityId: ${params.activityId}, age: ${params.age}`
}

3. 装饰器

如:@Component 中的@

主要作用:扩展功能 (es7)

例子:原理

let addUrl = (url:string) => {
  return (target:any) => {
    target.prototype.url = url
    // 这个例子中target指向 Stu 这个类,给Stu这个累的原型加上url属性
  }
}

@addUrl('我是lily')
class Stu {
  
}

let stu1:any = new Stu()
console.log(stu1.url) // 我是lily

装饰器要写在被扩展功能的上面,紧挨着,当调用类的时候触发装饰器

import { Component, Vue, Prop } from 'vue-property-decorator'

'vue-property-decorator' 是一个库,用来简化书写装饰器

@Prop private name!:string; // ! 表示name确定有值  附加!到其声明中来断定确实已赋值

4. 断言:判断类型

5. typescript 出现的目的,解决 js 弱类型的一个缺陷

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值