TypeScript 基础学习笔记:泛型 <T> vs 断言 as

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

  • TypeScript 基础学习笔记:泛型 `<T>` vs 断言 `as`
    • 🔥 引言
    • 🧩 泛型 `<T>`:灵活多变的类型容器
      • 示例:一个简单的泛型函数
    • 🏆 类型断言 `as`:告诉编译器“你错了,我是对的”
      • 示例:类型断言的应用场景
    • 🚀 泛型 `<T>` 在 `reactive` 中的应用
      • 示例:使用泛型定义响应式对象
    • 🏅 类型断言 `as` 在Vue 3中的运用
      • 示例:在特殊情况下使用类型断言
    • 📚 泛型与类型断言的区别总结

在这里插入图片描述


TypeScript 基础学习笔记:泛型 <T> vs 断言 as

🔥 引言

👋 TypeScript (TS) 以其静态类型的魔力,让我们的代码更加健壮、易读且易于维护。今天,我们将深入探讨两个核心概念——泛型(Generics) 和 类型断言(Type Assertions),并通过实战代码示例,揭示它们之间的区别。


🧩 泛型 <T>:灵活多变的类型容器

泛型是 TypeScript 提供的一种编写可重用代码的机制,它允许我们在定义函数、接口或类的时候不预先指定具体的类型,而是在使用时根据实际情况指定。🌈

示例:一个简单的泛型函数

function identity<T>(arg: T): T {return arg;
}// 使用示例
const num = identity<number>(42); // 类型为 number
const str = identity<string>("Hello"); // 类型为 string

在这里,<T> 是一个类型参数,代表一个待定的类型。当我们调用 identity 函数时,可以明确指定 T 应该是什么类型,从而让 TypeScript 进行精确的类型检查。


🏆 类型断言 as:告诉编译器“你错了,我是对的”

想象一下,你和编译器之间的一场小辩论,你自信地说:“听我的,这个变量就是这个类型!”这时候,类型断言就派上用场了。它允许你手动指定一个值的类型,即使这违反了 TypeScript 的静态类型检查规则。🚨

示例:类型断言的应用场景

假设你有一个 any 类型的对象,但你知道它实际上是一个特定类型的对象:

const someValue = {} as { name: string, age: number };someValue.name = "Alice";
someValue.age = 30;

在这个例子中,我们通过 as 断言将 someValue 强制转换为拥有 nameage 属性的对象。这告诉 TypeScript 我们确信这个操作是安全的,尽管它无法自动推断出来。


🚀 泛型 <T>reactive 中的应用

Vue 3中,reactive 是一个关键的API,用于创建响应式对象。当你在Vue应用程序中使用TypeScript时,泛型 <T> 和类型断言 as 也扮演着重要的角色,尤其是在定义和操作响应式数据时。

当你创建响应式对象时,可以使用泛型 <T> 来指定这个对象的类型。这样,TypeScript就能提前知道这个响应式对象的结构,并提供相应的类型检查和代码补全功能。这对于大型项目尤其有用,因为它有助于减少类型错误并提高开发效率。

示例:使用泛型定义响应式对象

import { reactive } from 'vue';interface User {name: string;age: number;
}const user = reactive<User>({name: 'Alice',age: 30,
});// TypeScript会根据User接口提供智能提示
user.name = 'Bob'; // 正确
user.age = 'thirty'; // 错误,TypeScript会提示类型不匹配

在这个例子中,<User> 是泛型参数,它告诉 reactive 函数内部的对象应当遵循 User 接口定义的结构。这使得对 user 对象的操作都受到严格的类型检查。


🏅 类型断言 as 在Vue 3中的运用

虽然在使用 reactive 时,直接使用泛型是更常见和推荐的做法,但在某些特殊情况下,你可能需要使用类型断言 as。这通常发生在你确信某个值的类型,而TypeScript无法自动推断或者推断错误的时候。

示例:在特殊情况下使用类型断言

假设你从一个外部API获取数据,并且你非常清楚这个数据的结构,但TypeScript无法自动推断:

const rawUserData = fetchUserData(); // 假设这个函数返回any类型
const userData = reactive(rawUserData as User);// 或者在解构时使用
const { name, age } = reactive(rawUserData) as { name: string, age: number };

在这个场景中,由于 fetchUserData 返回的是 any 类型,TypeScript无法提供类型安全。通过使用 as User 或具体结构的断言,我们强制告诉编译器我们期望的数据类型,从而能够在后续操作中得到类型支持。


📚 泛型与类型断言的区别总结

  • 泛型reactive 中主要用于定义响应式对象的预期类型结构,提供静态类型检查和代码补全,是编写类型安全代码的基础。
  • 类型断言 则是在TypeScript无法正确推断类型或者需要明确指定类型以绕过类型检查时的解决方案,它更多是一种开发者对类型的“手动确认”,应当谨慎使用,确保不会引入潜在的类型错误。

结合Vue 3的响应式系统,合理运用泛型和类型断言,可以使你的代码更加健壮、易于维护,同时保持高效开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024蓝桥杯CTF writeUP--packet

根据流量分析&#xff0c;我们可以知道129是攻击机&#xff0c;128被留了php后门&#xff0c;129通过get请求来获得数据 129请求ls Respons在这 里面有flag文件 这里请求打开flag文件&#xff0c;并以base64编码流传输回来 获得flag的base64的数据 然后解码 到手

Java:Servlet详解

目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…

Oracle 23ai rpm安装配置及问题处理

1.安装介质下载 Oracle 23ai 免费版本已经正式发布&#xff0c;Oracle官网提供免费的下载试用&#xff08;无需账号&#xff09;地址如下 官网下载和试用地址 Oracle Database 23ai Free&#xff1a; https://www.oracle.com/database/free/get-started 三种安装方式可选…

Ansible-inventory和playbook

文章目录 一、inventory 主机清单1、列表表示2、inventory 中的变量3、变量3.1 主机变量3.2 组变量3.3 组嵌套 二、playbook剧本1、playbook的组成2、编写剧本2.1 剧本制作2.2 准备nginx.conf2.3 运行剧本2.4 查看webservers服务器2.5 补充参数 3、剧本定义、引用变量3.1 剧本制…

mysql中varchar与bigint直接比较会导致精度丢失以至于匹配到多行数据

在mysql中&#xff0c;我们都知道如果一个索引字段使用了函数或者计算那么查询的时候索引会失效&#xff0c;可是我相信在联表的时候我们只会关注两个表关联字段是否都创建了索引&#xff0c;却没有关注过这两个字段的类型是否一致&#xff0c;如果不一致的话索引是会失效的&am…

解决html2canvas生成图片慢的问题

// 主要看那个点击事件就行 <divclass"textBox-right-board-group"v-for"item in screenList":key"item.id"><!-- 获取不同分辨率下的屏幕的展示的文字大小DPI&#xff1a; fontSize: getFontSize(item.resolutionRatio), --><di…

NTP网络时间服务器如何实现煤矿智能化管理?

随着煤矿行业的不断发展&#xff0c;安全生产和效率是煤矿企业始终关注的重点。NTP网络时间服务器作为一种高精度的时间同步技术&#xff0c;其应用在煤矿领域也逐渐得到广泛推广。 ZRBG1000 NTP网络时间服务器是对煤矿等行业对网络时间同步应用需求设计的高准确度、高性能NTP网…

买入期权是什么意思?

今天期权懂带你了解买入期权是什么意思&#xff1f;买入期权&#xff1a;也称看涨期权。一种赋予其持有者以特定的价格、在特定的到期日当天或之前买入某种资产的权力的金融工具。 买入期权是什么意思&#xff1f; 买入期权也称看涨期权。即赋予其持有者在到期日或到期日之前按…

OpenAI 发布 AI 生成图片检测器;Meta 推出 AI 广告创意工具;Google 正式发布 Pixel 8a,主打 AI

OpenAI 发布 AI 生成图片检测器 OpenAI 昨日官宣推出专用的 AI 监测工具&#xff0c;用于监测图片是否由其旗下 AI 图片生成工具 DALL-E 生成&#xff0c;准确率高达 98.8%。 不过该公司表示&#xff0c;这个检测工具并非旨在检测 Midjourney 和 Stability 等其他流行生成器生…

roofline model加速模型部署最后一公里

文章目录 模型部署教程来啦:)什么是Roofline Model&#xff1f;算法模型相关指标计算量计算峰值参数量访存量带宽计算密度kernel size对计算密度的影响output size对计算密度的影响channel size对计算密度的影响group convolution对计算密度的影响tensor reshape对计算密度的影…

五张图教你快速掌握设备CPU占用率高相关知识

以下五张图教你快速了解并掌握CPU占用率高的相关知识&#xff0c;包括CPU占用率高造成的影响、引起CPU占用率高的常见原因、如何定位CPU占用率高、如何解决CPU占用率高和如何尽量避免CPU占用率高 点击查看相关内容&#xff1a; 科普&#xff1a;CPU是怎么被制造出来的&#xf…

Linux流程控制

if语句 基本格式 if condition thencommand1 fi 写成一行 if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi if-else语句 格式 if condition thencommand1 command2...commandN elsecommand fi if else- if else if condition1 th…