在 TypeScript 开发中,keyoftypeof instanceof 是核心的类型操作符和操作符,专门用于提升类型安全、代码可读性和维护性。

1. keyof 操作符

  • 定义和用途keyof 是一个类型操作符,用于获取对象类型的所有键(属性名)的联合类型。它在编译时工作,主要用于静态类型检查,避免硬编码属性名错误。

  • API 语法type Keys = keyof T;,其中 T 是对象类型。

  • 使用场景

    • 动态访问对象属性时,确保属性名存在。

    • 结合泛型或映射类型创建灵活的类型约束。

  • 示例代码

interface User {id: number;name: string;age: number;
}// 获取 User 接口所有键的联合类型: "id" | "name" | "age"
type UserKeys = keyof User;// 应用:安全访问属性函数
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {return obj[key]; // 编译时确保 key 是有效属性
}const user: User = { id: 1, name: "Alice", age: 30 };
const userName = getProperty(user, "name"); // 正确,类型为 string
// const error = getProperty(user, "email"); // 编译错误:"email" 不是 User 的键

2. typeof 操作符

  • 定义和用途:在 TypeScript 中,typeof 是一个类型操作符,用于获取变量或表达式的静态类型(编译时)。它不同于 JavaScript 的运行时 typeof,专注于类型系统,帮助推导复杂类型。

  • API 语法type VarType = typeof variable;

  • 使用场景

    • 快速基于现有变量定义新类型。

    • 避免重复声明类型,提高代码复用性。

示例代码

const userObj = { id: 1, name: "Bob", isAdmin: true };// 获取 userObj 的类型: { id: number; name: string; isAdmin: boolean; }
type UserType = typeof userObj;// 应用:函数参数类型推导
function printUser(user: typeof userObj) {console.log(user.name); // 安全访问
}printUser({ id: 2, name: "Charlie", isAdmin: false }); // 正确
// printUser({ id: 3, name: "Dave" }); // 编译错误:缺少 isAdmin 属性

3. instanceof 操作符

  • 定义和用途instanceof 是一个运行时操作符,用于检查对象是否为某个类或构造函数的实例。在 TypeScript 中,它常用作类型守卫,缩小变量类型范围。

  • API 语法if (obj instanceof Class) { ... }

  • 使用场景

    • 类型守卫:在条件块中优化类型推断。

    • 面向对象编程中,确保对象属于特定类。

  • 示例代码

class Animal {name: string;constructor(name: string) {this.name = name;}
}class Dog extends Animal {bark() {console.log("Woof!");}
}function handleAnimal(animal: Animal) {if (animal instanceof Dog) {// 类型守卫:animal 被缩小为 Dog 类型animal.bark(); // 安全调用 Dog 特有方法} else {console.log(animal.name); // animal 类型为 Animal}
}const myDog = new Dog("Buddy");
handleAnimal(myDog); // 输出 "Woof!"

总结

操作符执行阶段输入输出典型场景
keyof编译时对象类型(type/interface键名字面量联合类型("key1" | "key2"动态属性访问、映射类型
typeof编译时/运行时变量/值类型上下文:详细类型结构
表达式:基本类型字符串
类型捕获、类型守卫
instanceof运行时对象实例boolean运行时类型检查、原型链验证
  • 核心区别

    • keyof 是编译时类型操作符,用于提取键的联合类型,增强对象属性安全性。

    • typeof 是编译时类型操作符,用于推导变量类型,提升代码复用。

    • instanceof 是运行时操作符,用于类型检查和守卫,处理继承和多态。

  • 适用场景

    • 使用 keyoftypeof 组合(如 keyof typeof obj)能静态定义动态属性访问。

    • instanceof 在面向对象设计中不可或缺,确保类型安全运行时。

  • 最佳实践:在前端开发中,结合这些操作符能减少 bug(如非法属性访问),提升代码可维护性。TypeScript 的类型系统通过这些工具,实现了强类型优势。

⚠️ 重要区别

  • keyof 和类型上下文的 typeof纯类型操作(编译后消失)

  • instanceof 和表达式的 typeof运行时操作(会生成JS代码)

以上讲解基于 TypeScript 5.x 版本,确保逻辑清晰和实用性。

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

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

相关文章

分布式专题——1.1 Redis单机、主从、哨兵、集群部署

1 Redis 部署 下面演示在 Linux 环境下部署 Redis7。 1.1 单机部署 1.1.1 检查安装 gcc 环境Redis 是由 C 语言编写的&#xff0c;它的运行需要 C 环境&#xff0c;因此我们需要先安装 gcc&#xff1b; # 关闭防⽕墙 systemctl stop firewalld.service # 查看防火墙状态 firewa…

2025年渗透测试面试题总结-54(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。1、SQL注入的防护方法有哪些&#xff1f; 2、永恒之蓝的漏洞原理是什么&#xff1f;怎么做到的&#xff1f; 3、命令…

安卓学习 之 按钮点击事件

今天学习安卓应用中的按钮点击事件&#xff1a;总结下来在安卓应用中的Button注册点击事件的方法主要是以下4种方法&#xff0c;稍后会逐个介绍&#xff1a; 第一种方法&#xff1a;自定义内部类的方法 第二种方法&#xff1a;匿名内部类的方法 第三种方法&#xff1a;当前Acti…

鸿蒙NEXT主题设置指南:应用级与页面级主题定制详解

在鸿蒙应用开发中&#xff0c;灵活的主题设置能力是实现个性化用户体验的关键技术&#xff0c;HarmonyOS NEXT提供了强大而灵活的主题设置功能&#xff0c;让开发者能够轻松实现应用级和页面级的主题定制。在当今追求个性化的时代&#xff0c;用户希望应用能够根据自己的喜好呈…

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元&#xff0c;2025-2031年复合增长率达94.3%&#xff0c;由Infineon和Navitas驱动汽车氮化镓技术正从一个有前景的细分市场加速进入主流电力电子领域。根据QYResearch&#xff08;恒州博智&#xff09;的《全球汽车GaN技术…

xftp断网后提示错误如何继续下载?

问题&#xff1a;xftp断网后提示错误如何继续下载&#xff1f;解决方法&#xff1a;断网后&#xff0c;先连接上网&#xff0c;然后继续双击右侧的那两个要传输的文件&#xff0c;然后会弹出一个覆盖还是继续下载&#xff08;如下图&#xff09;的选择框&#xff0c;选择继续下…

Day22_【机器学习—集成学习(4)—Boosting—GBDT算法】

提升树 &#xff08;Boosting Decision Tree &#xff09;每一个弱学习器通过拟合残差来构建强学习器梯度提升树 &#xff08;Gradient Boosting Decision Tree&#xff09;每一个弱学习器通过拟合负梯度来构建强学习器一、提升树残差数学公式为&#xff1a;残差真实值−预测值…

前缀和、子矩阵的和;差分、差分矩阵

一、前缀和数组要稍微注意前缀和数组从1开始#include <iostream>using namespace std;const int N 100010;int n, m; int a[N], s[N];int main() {scanf("%d%d", &n, &m);for (int i 1; i < n; i ) scanf("%d", &a[i]);for (int i…

启用BBR拥塞控制算法

目录 &#x1f4cb; 先决条件 &#x1f527; 启用步骤 &#x1f4dd; 额外检查与说明 ⚠️ 注意事项 BBR&#xff08;Bottleneck Bandwidth and Round-trip time&#xff09;是谷歌开发的一种TCP拥塞控制算法&#xff0c;它能有效提升网络传输速度和性能&#xff0c;尤其在…

Python:AI开发第一语言的全面剖析

文章目录引言1. Python的历史与AI开发的契合1.1 Python的诞生与设计哲学1.2 Python与AI发展的历史交汇2. 语言特性如何支持AI开发2.1 动态类型与交互式编程2.2 简洁优雅的语法2.3 高级数据结构的原生支持2.4 函数式编程特性2.5 强大的元编程能力3. 丰富的AI生态系统和库支持3.1…

Nikto 漏洞扫描工具使用指南

目录 ✨ 核心功能一览 &#x1f680; 基本使用方法 1. 扫描单个目标 2. 指定端口扫描 3. 扫描 HTTPS 目标 使用 -ssl 参数主要有两个核心原因 ⚙️ 高级使用技巧 1. 使用代理扫描 2. 保存扫描结果 3. 使用特定插件 4.交互命令 ✨ 核心功能一览 Nikto 是一款开源的 W…

FunASR的Java实现Paraformer实时语音识别 | 一款无需联网的本地实时字幕软件

0. 开发背景 我们在看直播时&#xff0c;没有视频字幕&#xff0c;可能看惯了视频字幕&#xff0c;来到直播中缺少字幕会感觉不习惯&#xff0c;特别是对于听力障碍的人群&#xff0c;只能依赖于字幕&#xff0c;那么这个软件可以解决直播&#xff0c;在线会议等场景中无字幕的…

从机器学习的角度实现 excel 中趋势线:揭秘梯度下降过程

1. 引言&#xff1a;Excel 的“一键魔法”背后藏着什么智慧&#xff1f;在 Excel 中&#xff0c;我们只需右键 → 添加趋势线&#xff0c;一条完美的直线就出现了。它快得像魔法&#xff0c;但魔法背后&#xff0c;是数学的严谨。今天&#xff0c;我们不关心 Excel 内部用了什么…

关于上拉电阻

上拉电阻的作用&#xff1a;辅助浮空状态输出高电平 其实就是确定这根线的电平&#xff0c;不能让他处于一种未知的状态。 其次也可以起到限制电流的作用&#xff0c;防止损坏原件 那么上拉电阻如何取值&#xff1f; 首先来看一下驱动能力。 因为线上是一定有寄生电容的&am…

PiscCode构建Mediapipe 手势识别“剪刀石头布”小游戏

在计算机视觉与人机交互领域&#xff0c;手势识别是一个非常有趣的应用场景。本文将带你用 Mediapipe 和 Python 实现一个基于摄像头的手势识别“剪刀石头布”小游戏&#xff0c;并展示实时手势与游戏结果。 1. 项目概述 该小游戏能够实现&#xff1a; 实时检测手势&#xff0…

【VoNR】VoNR 不等于 VoLTE on 5G

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

计算机网络:网络设备在OSI七层模型中的工作层次和传输协议

OSI七层模型&#xff08;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层&#xff09;中&#xff0c;不同网络设备因功能不同&#xff0c;工作在不同层次。以下是典型网络设备的工作层次及核心功能&#xff1a;1. 物理层&#xff08;第1层&#xff09; 核心功能&a…

RSA-e和phi不互素

1.题目import gmpy2 import libnum p 1656713884642828937525841253265560295123546793973683682208576533764344166170780019002774068042673556637515136828403375582169041170690082676778939857272304925933251736030429644277439899845034340194709105071151095131704526…

基于单片机蒸汽压力检测/蒸汽余热回收

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;单片机作品题目速选一览表&#x1f680; &#x1f449;&#x1f449;&#x1f449;&#x1f449;单片机作品题目功能速览&#x1f680; &#x1f525;更多文章戳&#x1f449;小新单片机-CSDN博客&#x1f68…

https 协议与 wss 协议有什么不同

HTTPS 是用于网页数据传输的安全协议&#xff0c;而 WSS 是用于实时双向通信&#xff08;如聊天、直播&#xff09;的安全协议&#xff0c;二者的设计目标、应用场景、底层逻辑均存在本质区别。以下从 7 个核心维度展开对比&#xff0c;并补充关键关联知识&#xff0c;帮助彻底…