typeScript

泛型

泛型可以理解为宽泛的类型,通常用于类和函数。使用的时候我们再指定类型 泛型不仅可以让我们的代码变得更加健壮,还能让我们的代码在变得健壮的同时保持灵活性和可重用性。

通过用<T>来表示,放在参数的前面

泛型约束

// 创建一个接口
interface f{
    length:number
}
​
// 本身没有length 所以要创建一个具有length属性的接口继承一下
function fn<T extends f>(arr:T):number{
    return arr.length
}
console.log(fn("的撒"));

泛型接口

// 泛型接口
// interface j<T1,T2>{
//     name:T1;
//     sex:T2
// }
​
// let p:j<string,string>={
//     name:"杨杜坤",
//     sex:"难"
// }
​
// 指定默认值
interface j<T1=string,T2=number>{
    name:T1;
    sex:T2
}
let p:j={
    name:"杨杜坤",
    sex:10
}

泛型类

// 泛型类的使用
​
// 创建一个类
class  fn<T1,T2> {
    name:T1;
    sex:T1;
    age:T2;
    constructor(name:T1,sex:T1,age:T2) {
        this.name=name;
        this.sex=sex;
        this.age=age;
    }
}
let p = new fn<string,number>("杨杜坤","男",17)
console.log(p);

其他补充类型

unknown类型

unknown类型代表任何值。这与any类型类似,但更安全,因为对未知unknown值做任何事情都是不合法的。

unknown类型被称作安全的any

1、任何类型都可以赋值给unknown类型2、不能将unknown类型赋值给其他类型3、unknown与其他任何类型组成的交叉类型最后都是其他类型4、unknown除了与any以外,与其他任何类型组成的联合类型最后都是unknown类型5、never类型是unknown类型的子类型


// unknown类型

// 1、可以赋值任何类型
 let a_1:unknown = 19;
 let a_2:unknown = "哈哈哈";


// // 2、不能将unknown类型赋值给其他类型
 let a_3:number=10;
 // a_3=a_1; 报错
// // 可以通过类型断言赋值
 a_1 =a_3 as number;
// // 可以通过类型缩小
 if(typeof a_1 =="number"){
     a_3 = a_1
 }

// // 3、unknown与其他任何类型组成的交叉类型最后都是其他类型
 let a_4:unknown&number =19;

// //4、unknown除了与any以为ia,与其他任何类型组成的联合类型最后都是unknown类型
 let a_5:unknown|any = "哈哈哈"; //any
 let a_6:unknown|number = 19; //unknown

// // 5、never类型是unknown类型的子类型
 type a_7 = never extends unknown ?true:false;

map类型

Map对象保存键值对。并且能够记住键的原始插入顺序。 任何值(对象或者原始值)都可以作为一个键或—个值。 Map集ES6中引入的一种新的数据结构 可以使用for of进行迭代 创建map: let myMap = new Map (); Map相关的函数与属性: map.clear()-移除Map对象的所有键/值对。

map.set()-设置键值对,返回该Map对象。 map.get()-返回键对应的值,如果不存在,则返回undefined. map.has()-返回一个布尔值,用于判断 Map中是否包含键对应的值。 map.delete() -删除 Map 中的元素,删除成功返回true,失败返回false

map.size -返回Map对象健/值对的数量。 map.keys() -返回一个 lterator对象,包含了Map对象中每个元素的健。

map.values()-返回一个新的lterator对象, 包含了Map对象中每个元素的值。

// Map类型

// 创建一个Map对象
 let set = new Map();

// // 往Map中添加内容
 set.set("杨杜坤",1)
 set.set("杨杜",2)
 set.set("杨坤",3)

 map.get()-返回键对应的值,如果不存在,则返回undefined.
 console.log(set.get("杨杜坤"));

// map.has()-返回一个布尔值,用于判断 Map中是否包含键对应的值。
 console.log(set.has("杨杜坤"));
 console.log(set.has("杨"));

// map.size -返回Map对象健/值对的数量。
 console.log(set.size);

/map.delete() -删除 Map 中的元素,删除成功返回true,失败返回false
 console.log(set.delete("杨杜坤"));
 console.log(set.delete("杨"));

// map.clear()-移除Map对象的所有键/值对。
 set.clear()
 console.log(set);

// 迭代Map中的key
 for(let key of set.keys()){
     console.log(key);
 }
// // 迭代Map中的value
 for(let value of set.values()){
     console.log(value);
 }
// // 迭代Map中的key=>value
 for(let a of set.entries()){
     console.log(a);
 }
// // 使用对象解析
 for(let [key,value] of set){
    console.log(key,value);
    
 }

条件类型

export default{}

// 通过泛型判断类型
interface str{
    str:string
}
interface num{
    num:number
}

type fx<T>=T extends string ? str:num;

function fn<T extends number | string >(idOrName:T):fx<T>{
    throw ""
    // console.log(idOrName);

}
let res1 = fn("杨杜坤");
let res2 = fn(19);
// console.log(res1,res2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

活着就是为了樱岛麻衣~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值