TS typescript 泛型函数

function firstElement < T >( arr : T []): T | undefined {
return arr [ 0 ]
}

firstElement < string >([ “hello” , “lihao” ])
firstElement < number >([ 1 , 2 , 3 ])

function map < I , O >( arr : I [], func 😦 arr : I ) => O ): O []{
return arr . map ( func )
}
// 把字符串转成 number 类型
const parsed = map ([ ‘1’ , ‘2’ , ‘3’ ],( n ) => { return parseInt ( n )})
console . log ( parsed )

// 泛型约束 extends
// 限制条件
// 限制了传的 A B 包含 length 属性
function longest < Type extends { length : number }>( a : Type , b : Type ){
if ( a . length >= b . length ){
return a
} else {
return b
}
}
// 泛型约束
// 在书写泛型的时候,我们往往需要对类型参数作一定的限制,比如希望传入的参数都有 name 属性的数组我们可以这么写:
function getCnames < T extends { name : string }>( entities : T []): string [] {
return entities . map ( entity => entity . name )
}
// 这里 extends 对传入的参数作了一个限制,就是 entities 的每一项可以是一个对象,
// 但是必须含有类型为 string 的 cname 属性。再比如,redux 里 dispatch 一个 action,必须包含 type 属性:
interface Dispatch < T extends { type : string }> {
( action : T ): T
}
// 条件类型与高阶类型
// SomeType extends OtherType ? TrueType : FalseType;
//extends 还有一大用途就是用来判断一个类型是不是可以分配给另一个类型,这在写高级类型的时候非常有用,举个????:
type Human = {
name : string ;
}
type Duck = {
name : string ;
}
type Bool = Duck extends Human ? ‘yes’ : ‘no’ ; // Bool => ‘yes’

// 指定类型参数
function combine < Type >( arr1 : Type [], arr2 : Type []): Type []{
return arr1 . concat ( arr2 )
}
// const arrCom=combine([1.2,3],[4,5,6])
// 指定参数的类型 比如 string numb
const arrCom = combine < string | number >([ ‘1’ , ‘2’ , ‘3’ ],[ 4 , 5 , 6 ])

// 优秀通用函数准则
// 尽量使用 T 泛型来约束,
function firsrELement < T >( arr : T []){
return arr [ 0 ]
}
function firstElement2 < T extends any []>( arr : T ){
return arr [ 0 ]
}
const a1 = firsrELement ([ 1 ])
const a2 = firstElement2 ([ 1 ])
// 尽可能少使用类型

01Typescript介绍 、Typescript安装、Typescript开发工具(15分51秒).rar 02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) (上) (20分29秒).rar 03 Typescript中的数据类型 任意类型 (any) null 和 undefined void类型 never类型 (下) (16分6秒).rar 04 Typescript中的函数 函数的定义 可选参数 默认参数 剩余参数 函数重载 箭头函数 (31分50秒).rar 05 Typescript中的类 Es5中的类和静态方法 继承 (原型链继承、对象冒充继承、原型链+对象冒充组合继承) (20分40秒).rar 06 Typescript中的类 类的定义 继承 类里面的修饰符 (上) (29分4秒).rar 07 Typescript中的类 类中的静态属性 静态方法 抽象类 多态 (下) (27分52秒).rar 08 Typescript中的接口的用途 以及属性类型接口 (19分46秒).rar 09 Typescript中的属性类型接口【案例】 定义Ajax请求数据的接口 ts封装ajax (8分).rar 10 Typescript中的函数类型口 【案例】 加密方法约束 (5分11秒).rar 11 Typescript中的可索引接口 类类型接口 (12分2秒).rar 12 Typescript中接口扩展、接口的继承 (7分19秒).rar 13 Typescript中的泛型 泛型变量 泛型类 (22分54秒).rar 14 Typescript的泛型接口 泛型类接口 (8分42秒).rar 15 Typescript泛型类 - 把类作为参数类型的泛型类 (21分47秒).rar 16 Typescript 类型、接口、类 、泛型 综合使用--Typescript封装统一操作Mysql Mongodb Mssql的底层类库 (14分31秒).rar 17 Typescript 模块 以及模块化封装DB库 封装类似Mongoose风格的类库 (25分22秒).rar 18 命名空间 命名空间块化 (11分35秒).rar 19 装饰器定义 类装饰器 属性装饰器 装饰器工厂 (23分17秒).rar 20 装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序 (28分39秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初遇你时动了情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值