我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TypeScript在vue中的使用解读

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TypeScript在vue中的使用解读

主要介绍 TypeScript 在 vue 中的使用,还有一些j注释起来的 js 代码做对照

参考链接:合成 API 的TypeScript

vue3中配合使用TS,还需要额外安装一个vscode插件:Typescript Vue Plugin

Typescript Vue Plugin

1. 父传子 defineProps

父组件中

<script setup lang="ts">
  import { ref } from 'vue';
  import MyComVue from './components/MyCom.vue';

  let money = ref(100)
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>父组件</h1>
    <p>传给子组件:{{money}}</p>
    <MyComVue
      :money="money"
      car="特斯拉"
    />
    <MyComVue
      :money="money"
    />
  </div>
</template>

子组件中

<script setup lang="ts">
  // 1. js中
  // const props = defineProps({
  //   money:{
  //     type: Number,
  //     require: true
  //   },
  //   car: {
  //     type: String,
  //     required: true
  //   } 
  // })
  // 2. ts中
  // props可以通过解构来指定默认值,将指定默认值的变量定义为可选参数
  const {money, car='GTR'} = defineProps<{
    money: number
    car?:string
  }>()
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>子组件</h1>
    <p>从父组件接收 {{money}} {{car}}</p>
  </div>
</template>

注:提供的默认值需要在模板中渲染,需要额外添加配置

// vite.config.js文件中

export default defineConfig({
  plugins: [vue({
    reactivityTransform: true
  })]
})

父传子

2. 子传父 defineEmits

父组件中

<script setup lang="ts">
  import { ref } from 'vue';
  import MyComVue from './components/MyCom.vue';

  let money = ref(100)
  const event1 = (val: number) => {
    console.log('event1',val);
    money.value = val
  }
  const changeCar = (val: string) => {
    console.log('changeCar',val);
  }
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>父组件</h1>
    <p>传给子组件:{{money}}</p>
    <MyComVue
      :money="money"
      car="特斯拉"
      @change-car="changeCar"
    />
    <MyComVue
      :money="money"
      @event1="event1"
    />
  </div>
</template>

子组件中

<script setup lang="ts">
  // 使用ts的泛型指令props类型
  const {money, car='GTR'} = defineProps<{
    money: number
    car?:string
  }>()

  // js中-- const myEnit = defineEmits(['event1'])
  // ts中
  const myEmit = defineEmits<{
    (e:'event1', money:number):void
    (e:'changeCar', val:string):void
  }>()
  const hClick = () => {
    myEmit('event1', 200)
    myEmit('changeCar', 'BWM')
  }
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>子组件</h1>
    <p>从父组件接收 {{money}} {{car}}</p>
    <button @click="hClick">emit</button>
  </div>
</template>

computedr

3. ref和computed

<script setup lang="ts">
  import {computed, ref} from 'vue'

  // 1. ref<泛型>()
  // 简单类型可以省略,复杂类型推荐使用
  // const todos = ref([{id:1, content: 'sleep', isDone: true}])
  // ref<{id:Number,content: String,sDone: Boolean}[]>([])
  const todos = ref<{
    id:Number
    content: String
    isDone: Boolean
  }[]>([])

  setTimeout(()=>{
    todos.value = [
      {id:1, content: 'sleep', isDone: true},
      {id:2, content: 'work', isDone: false}
    ]
  },1000)

  // 2. 计算属性: 已完成数量
  // 通过泛型可以指定computed计算属性的类型,通常可以省略
  const leftCount = computed(() => {
    return todos.value.filter(item => item.isDone).length
  })
</script>

<template>
  <div>
    <ul>
      <li v-for="item in todos">{{item.content}} {{item.isDone}}</li>
    </ul>
    已完成: {{leftCount}}
  </div>
</template>

computed

4. 事件处理 ($event)

$event在vue中,他是一个特殊的变量名

  • 1. 写在回调函数中
  • 2. 固定名字
  • 3. 表示当前的事件对象
const move = (e: MouseEvent) => {
  mouse.value.x = e.pageX
  mouse.value.y = e.pageY
}

<-- 鼠标悬停在 $event 上会提示类型为 MouseEvent -->
<h1 @mousemove="move($event)">根组件</h1>

5. Template Ref

<template>
  <div>
    <h1 ref="refH1">ref</h1>
    <!-- 点击按钮在控制台打印 H1 的中的value值 -->
    <button @click="hClick">click</button>
  </div>
</template>

<script setup lang="ts">
  import { ref } from 'vue';

  const refH1 = ref<null | HTMLHeadElement>(null)
  const hClick = () => {
    console.log(refH1.value?.innerHTML);
  }
</script>

6. 可选链操作符

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。

let nestedProp = obj.first?.second;
console.log(res.data?.data)
obj.fn?.()

if (obj.fn) {
    obj.fn()
}
obj.fn && obj.fn()

// 等价于
let temp = obj.first;
let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);

7.非空断言

如果我们明确的知道对象的属性一定不会为空,那么可以使用非空断言 !

// 告诉typescript, 明确的指定obj不可能为空
let nestedProp = obj!.second;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TypeScript在vue中的使用解读

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

TypeScript在vue中的使用解读

这篇文章主要介绍了TypeScript在vue中的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-08

在vue中完美使用ueditor组件(cdn)解读

这篇文章主要介绍了在vue中完美使用ueditor组件(cdn)解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

TypeScript 在 VUE 中的应用场景:解锁无限可能

TypeScript 在 Vue 中的应用场景:解锁无限可能
TypeScript 在 VUE 中的应用场景:解锁无限可能
2024-03-09

vue项目中如何使用typescript

本篇内容主要讲解“vue项目中如何使用typescript”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue项目中如何使用typescript”吧!1、引入Typescriptnpm inst
2023-06-21

TypeScript 在 VUE 中的应用:突破性能限制

在 Vue 中使用 TypeScript:解锁卓越性能与可靠性
TypeScript 在 VUE 中的应用:突破性能限制
2024-03-09

Type(术)霸 Vue:认识 TypeScript 在 Vue 中的优势

深入了解 TypeScript 在 Vue 中的优势
Type(术)霸 Vue:认识 TypeScript 在 Vue 中的优势
2024-03-08

vue3在setup中使用mapState解读

这篇文章主要介绍了vue3在setup中使用mapState方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-16

typescript在vue中的入门案例代码demo

这篇文章主要介绍了typescript在vue中的入门案例代码demo,使用技术栈vue2+typescript+scss入门练手项目,天气预报demo,需要的朋友可以参考下。
2022-12-30

编程热搜

目录