Typesrcipt泛型约束详细解读

代码示例:

TypeScript 复制代码
// 如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性
(() => {
  // 定义一个接口,用来约束将来的某个类型中必须要有length这个属性
  interface ILength{
    // 接口中有一个属性length
    length:number
  }
  function getLength<T extends ILength>(x: T): number {
    return x.length
  }

  console.log(getLength<string>('终于等到你,还好我没放弃'))
  // console.log(getLength<number>(123))
})()

重要代码解析:

  • function getLength<T extends ILength>(x: T): number:定义了一个名为**getLength** 的泛型函数。<T extends ILength>是类型参数部分,其中T是类型参数,extends ILength 表示类型参数 **T**必须是实现了 **ILength**接口的类型,也就是 **T**类型的对象必须具有 length 属性。
  • x: T 表示函数接受一个类型为 **T**的参数 x
  • : number 是函数的返回值类型声明,表示该函数将返回一个 number 类型的值。
  • return x.length函数体部分,通过返回 xlength 属性值来获取传入对象的长度。由于在类型参数上添加了 extends ILength的约束,TypeScript 编译器能够确保x 具有length 属性,从而避免了直接对泛型参数取 length 属性可能导致的类型错误。
相关推荐
该换个名儿了2 分钟前
git多个commit合并成一个
前端·git
LaoZhangAI5 分钟前
2025最新OpenAI组织验证失败完全解决方案:8种有效方法彻底修复【实战指南】
前端·后端
国家不保护废物6 分钟前
微信红包算法深度解析:从产品思维到代码实现
javascript·算法·面试
siwangqishiq217 分钟前
Vulkan Tutorial 教程翻译(三) 绘制三角形 2.1 安装
前端
LaughingZhu17 分钟前
PH热榜 | 2025-06-05
前端·人工智能·经验分享·搜索引擎·产品运营
大模型真好玩18 分钟前
最强大模型评测工具EvalScope——模型好不好我自己说了算!
前端·人工智能·python
wxid:yiwoxuan34 分钟前
购物商城网站 Java+Vue.js+SpringBoot,包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块
java·vue.js·spring boot·课程设计
隐藏用户_y34 分钟前
JavaScript闭包概念和应用详解
javascript·面试
Dream耀34 分钟前
CSS选择器完全手册:精准控制网页样式的艺术
前端·css·html
wordbaby34 分钟前
React 19 亮点:让异步请求和数据变更也能用 Transition 管理!
前端·react.js