当前位置: 首页 > news >正文

TS泛型坑,编译懵!

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

TS泛型坑,编译懵!

目录

昨天写个工具函数,想从对象里取属性。一编译,直接报错:Property 'key' does not exist on type 'T'。懵了,这不就是个普通取属性吗?

错误代码

// 想从obj取key,但T没约束functiongetProperty<T>(obj:T,key:string){returnobj[key];// 编译器:Property 'key' does not exist on type 'T'}

核心根源
T是任意类型。编译器不知道key是不是obj的属性。它怕你访问不存在的属性,所以直接报错。就像你让一个陌生人去开保险箱,不给钥匙还说“试试看”。

正确代码

// K extends keyof T:确保key是T的合法属性functiongetProperty<T,KextendskeyofT>(obj:T,key:K){returnobj[key];// 编译器:放心,key在T里}

对比关键

错误写法正确写法
T无约束K extends keyof T约束
key: string可能无效key: K编译器自动检查
编译报错编译通过

实际用例

constuser={id:1,name:'Alice'};getProperty(user,'name');// ✅ 正确getProperty(user,'age');// ❌ 编译报错!age不在user里

避坑总结
泛型函数里,只要涉及对象属性访问,必须用keyof约束。别想偷懒写string,编译器会给你整出一堆错误。我昨天就栽这儿,debug到凌晨三点。记住:

  1. keyof不是装饰品,是救命稻草
  2. 问自己:key是T的属性吗?不是?就加extends keyof
  3. 类型检查不是来坑你的,是来防你坑自己的

下次写泛型,先写keyof。省的半夜被编译器怼。

http://www.jsqmd.com/news/1091005/

相关文章:

  • 每日一题————2026-6-28 最长上升子序列加强版(线性DP版)
  • 世界模型、元宇宙、数字孪生、物理AI:它们是一回事吗?
  • AR 镀膜技术原理:为什么能减少反光?——悟赫德护景贴观复盾的抗反射实现
  • 第11天:进程基础内核认知:PCB与task_struct结构体解析
  • 企业官网的信息架构设计:从内容建模、导航到 URL 与内链
  • FreeRTOS源码详解(一)——申请和释放内存
  • MTEX工具箱:如何用5个关键功能解决材料科学家的晶体学分析难题
  • FreeRTOS源码详解(九)——Notification
  • Linux源码补充
  • 一线观察:激光焊接机器人自动上下料半年实录
  • 小红书SEO怎么做?关键词布局是第一步
  • AMD Ryzen处理器深度调试指南:5分钟掌握SMUDebugTool免费开源工具
  • [Android]appops
  • ❤️全景图鉴❤️武理计科:从C语言到毕业设计的四年技术栈演进
  • 2026沧州黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • Claude Code强大是因为模型强还是agent实现细节?
  • 3分钟免费上手:可视化Kafka集群管理的完整解决方案
  • GlosSI:让Steam控制器支持所有Windows游戏的终极解决方案
  • 刮宫几天能洗澡洗头?刮宫术后洗护与科学子宫修护
  • League Akari 自动秒选终极指南:深度解析智能英雄选择系统架构与实战应用
  • 如何用3分钟掌握Calibre繁简中文转换插件:电子书阅读的终极语言解决方案
  • Java 线上排查标准手册:CPU 飙高、内存泄漏、接口慢,jstack/jmap/jstat 命令速查
  • 模型费用篇《DeepSeek V4-Flash 写代码“有点贵”?一文讲透模型费用真相与省心技巧》
  • 游戏公会推广系统怎么搭建?6个选型重点
  • Spring-Boot-4.0正式发布
  • Parsec VDD虚拟显示器终极指南:释放Windows显示潜能的完整解决方案
  • 预测性维护终极指南:从数据采集到机器学习落地的完整路径
  • FreeRTOS源码详解(七)——Counter
  • 应该很快就能搞定图片选择的问题了
  • TPA6140A2耳机放大器:Class-G与DirectPath技术解析与设计实践