ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[danger] ##### 泛型约束 -- 来约束泛型参数 ~~~ 1.现在泛型会根据你传入的值还进行动态类型,问题来了有一些不具备我们代码中属性的值传入,会导致编译 阶段报错如图一,这时候需要对泛型传入的参数加以约束,这时候使用泛型约束 2.思路就是让泛型类型去继承接口或者一些类,让在编译过程去检测传入的,泛型约束需要关键字('extends') 泛型是具有当前指定的属性 3.简单的说泛型约束解决在函数内部使用泛型变量的时候,由于事先不知道它是哪种类型,所以不能随意的操 作它的属性或方法 4.有些更详细的案例可以看一下开篇文章的地址 ~~~ * 图一 ![](images/screenshot_1614046846986.png) ~~~ interface ValueWithLength { length: number } const getArray = <T extends ValueWithLength>(arg: T, times): T[] => { return new Array(times).fill(arg) } getArray([1, 2], 3) getArray('123', 3) getArray({ length: 2, }, 3) getArray(1, 3) // 报错 数字类型没有length ~~~ >[danger] ##### 泛型约束结合索引类型的使用 ~~~ 1. 下面的案例 实现的是,泛型参数必须是传入对象key中存在的,这是一个 继承了 keyof 一个属性 ~~~ ~~~ const getProps = <T, K extends keyof T>(object: T, propName: K) => { return object[propName] } const objs = { a: 'a', b: 'b', } getProps(objs, 'a') ~~~ >[danger] ##### 防止思维定式 ~~~ function getExcludeProp<T extends {props:string}>(obj:T){ return obj } // getExcludeProp({name:'w'}) // 报错 getExcludeProp({name:'w',props:'w'}) ~~~