尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

TS泛型坑,编译懵!

TS泛型坑,编译懵!
📅 发布时间:2026/6/29 18:17:42
💓 博客主页:瑕疵的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。省的半夜被编译器怼。

相关新闻

  • 第11天:进程基础内核认知:PCB与task_struct结构体解析
  • FreeRTOS源码详解(九)——Notification
  • 一线观察:激光焊接机器人自动上下料半年实录

最新新闻

  • 如何零代码打造个性化小米手表表盘:开源工具Mi-Create终极指南
  • AO3镜像站完全指南:5分钟解锁全球同人创作宝库的终极解决方案
  • Lightroom Classic下载教程Lightroom Classic 2026 保姆级安装步骤(附安装包)
  • 你的 AI Agent 需要提示词保护吗?一份实用判断指南
  • 鸿蒙原生 ArkTS 布局实战:RelativeContainer + Panel 实现自适应面板
  • text文件行列转置——r代码

日新闻

  • ENVI5.3.1实战:基于Landsat 8影像的区域无缝镶嵌与精准裁剪
  • 3步完成HS2-HF Patch安装:新手快速打造完美HoneySelect2体验
  • 微信好友检测终极指南:3分钟发现谁已悄悄删除你

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号