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 属性可能导致的类型错误。
相关推荐
object not found4 分钟前
UniCloud 本地调试云对象报 Cannot find module ‘uni-id-common‘ 的排查与解决
前端
跨境小技8 分钟前
2026 Shopee数据抓取逐步教程:技术难点、解决思路与实战方法
前端·数据库·网络爬虫
一枚小太阳11 分钟前
想学 Electron?这份「能跑的示例集」一篇搞懂
前端·electron
是Dream呀11 分钟前
自动化打造信息影响力:用 Web Unlocker 和 n8n 打造你的自动化资讯系统
运维·前端·爬虫·自动化
陈广亮12 分钟前
告别 JSON.parse(JSON.stringify()) — 原生深拷贝 structuredClone
javascript
Trae1ounG27 分钟前
这是json
前端·javascript·vue.js
Dxy123931021631 分钟前
Python 将 JSON 字符串转换为字典
前端·python·json
叫我一声阿雷吧37 分钟前
【JS实战案例】实现图片懒加载(基础版)原生JS+性能优化,新手可直接复现
开发语言·javascript·性能优化·js图片懒加载
colicode43 分钟前
语音提醒接口开发方案:日程安排与待办事项自动电话提醒的集成思路
前端·前端框架·语音识别
爱上妖精的尾巴1 小时前
8-8 WPS JS宏 正则表达式 字符组与任选
java·服务器·前端