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 属性可能导致的类型错误。
相关推荐
掘金者阿豪1 分钟前
在AI时代,没有人是“只写一行代码的人”——我们为何都在被迫成为全栈?
vue.js·后端
早點睡3905 分钟前
ReactNative项目OpenHarmony三方库集成实战:react-native-contacts
javascript·react native·react.js
☞无能盖世♛逞何英雄☜8 分钟前
Echarts数据可视化应用
前端·信息可视化·echarts
2501_9436103610 分钟前
我爱导航系统美化版源码网址导航系统带后台-【全开源】
前端·后端·html·php
__Yvan14 分钟前
Kotlin 的 ?.let{} ?: run{} 真的等价于 if-else 吗?
android·开发语言·前端·kotlin
英俊潇洒美少年36 分钟前
JS 事件循环(宏/微任务) ↔ Vue ↔ React** 三者的关系
javascript·vue.js·react.js
Greg_Zhong40 分钟前
Js中异步编程的知识扩展【异步有哪些、如何执行、宏任务和微任务等】
开发语言·javascript
陈随易44 分钟前
我也曾离猝死很近
前端·后端·程序员
烈焰飞鸟1 小时前
iconfont 在 uni-app 项目中的完整使用指南
vue.js·uni-app·iconfont
喵个咪1 小时前
GoWind Content Hub|风行,开箱即用的企业级前后端一体内容中台
前端·后端·cms