TS类型声明之二

简介: TS类型声明之二

为 emits 标注类型

<script setup lang="ts">
// 运行时
const emit = defineEmits(['change', 'update'])
// 基于类型
const emit = defineEmits<{
  (e: 'change', id: number): void
  (e: 'update', value: string): void
}>()
</script>
import { defineComponent } from 'vue'
export default defineComponent({
  emits: ['change'],
  setup(props, { emit }) {
    emit('change') // <-- 类型检查 / 自动补全
  }
})

为 ref() 标注类型


默认推导类型

ref 会根据初始化时的值自动推导其类型:

import { ref } from 'vue'
// 推导出的类型:Ref<number>
const year = ref(2020)
// => TS Error: Type 'string' is not assignable to type 'number'.
year.value = '2020'

通过接口指定类型

有时我们可能想为 ref 内的值指定一个更复杂的类型,可以通过使用 Ref 这个接口:

import { ref } from 'vue'
import type { Ref } from 'vue'
const year: Ref<string | number> = ref('2020')
year.value = 2020 // 成功!

通过泛型指定类型

或者,在调用 ref() 时传入一个泛型参数,来覆盖默认的推导行为:

// 得到的类型:Ref<string | number>
const year = ref<string | number>('2020')
year.value = 2020 // 成功!


如果你指定了一个泛型参数但没有给出初始值,那么最后得到的就将是一个包含 undefined 的联合类型:

// 推导得到的类型:Ref<number | undefined>
const n = ref<number>()
相关文章
|
2天前
TS类型声明的方法之二
TS类型声明的方法之二
5 0
|
5月前
|
JavaScript
TS中的枚举是什么如何使用
TS中的枚举是什么如何使用
24 0
|
7月前
|
资源调度 JavaScript 前端开发
【TypeScript】TS类型声明文件
【TypeScript】TS类型声明文件
124 0
|
10月前
|
JavaScript 编译器
面试题-TS(二):如何定义 TypeScript 中的变量和函数类型?
在TypeScript中,我们可以使用冒号(:)来指定变量的类型。以下是一些常见的变量类型:
|
JavaScript
TypeScript:类型标注和d.ts类型声明文件的使用
TypeScript:类型标注和d.ts类型声明文件的使用
152 0
TypeScript:类型标注和d.ts类型声明文件的使用
|
JavaScript 编译器 索引
TS进阶篇 | TS高级类型之字面量类型、联合类型、交叉类型(上)
TypeScript中除了基本类型之外,还定义了很多高级类型,高级类型包括字面量类型、联合类型、交叉类型、索引类型、映射类型、条件类型、this类型等。因为内容太多,所以这篇文章先来介绍前三个类型,其余类型会在高级类型的下篇介绍。
1119 0
|
存储 JavaScript 编译器
【TypeScript教程】# 3:TS的类型声明
【TypeScript教程】# 3:TS的类型声明
191 0
【TypeScript教程】# 3:TS的类型声明
|
JavaScript
【TypeScript】TS类型声明(二)
本文主要讲解TypeScript的基本数据结构,主要包括JS基本数据类型以及TS特有的数据类型。
265 0
【TypeScript】TS类型声明(二)
|
安全 JavaScript 编译器
【TypeScript】TS类型声明(四)
any在使用过程中就像一个潘多拉魔盒,即使使用了断言,也丧失了在静态类型检查阶段发现错误的可能性。unknown用于描述类型不确定的变量,这与`any`类型相似,但更安全,因为对未知值做任何事情都是不合法的。
119 0
【TypeScript】TS类型声明(四)
|
前端开发
前端项目实战40-ts中泛型得定义
前端项目实战40-ts中泛型得定义
54 0