TS:高级类型的十八般武艺

本文详细介绍了TypeScript的高级类型,包括交叉类型、联合类型、自定义类型保护、可为null的类型、类型别名、字符串字面量类型、可辨识联合等。讲解了它们的概念、用法和实际应用,帮助开发者更好地理解和运用TypeScript的这些特性。
摘要由CSDN通过智能技术生成

TS:高级类型

1. 交叉类型

  • 交叉类型是将多个类型合并为一个类型,使得这个类型包含了所有类型的特性。

  • 大多数是在混入mixins或者其他不适合典型面向对象模型的地方看到交叉类型的使用。

    function extend<T,U>(first: T,second: U):T & U{
         
        let result = <T & U>{
         };
        for (let id in first)
            (<any>result)[id] = (<any>first)[id];
        for (let id in second)
            if(!result.hasOwnProperty(id))
                (<any>result)[id] = (<any>second)[id];
    }
    class Person {
         
        constructor(public name : string){
         }
    }
    interface Loggable {
         
        log() : void;
    }
    class Logger implements Loggable{
         
        log() {
         
            // aaaaaaaaa
        }
    }
    
    let mix = extend(new Person("yivi"),new Logger());
    console.log(mix.name);
    mix.log();
    

2. 联合类型

  • 联合类型作用类似于逻辑操作符——“或”,同样用“|”来分割每个类型。

  • 如果一个值为联合类型,我们只能访问该联合类型的所有类型的公有成员

    interface Bird {
         
        fly();
        layEggs();
    }
    interface Fish {
         
        swim();
        layEggs();
    }
    
    function getAnimal() : Fish | Bird{
         
        // do something
    }
    let pet = getAnimal();
    pet.layEggs();	// ok
    pet.swim();	//error
    
  • 类型保护与区分类型:当我们想要知道联合类型的确切类型是不是Fish时,可以使用类型断言进行判断;

    let pet = getAnimal();
    
    if((<Fish>pet).swim){
         
       	(<Fish>pet).swim(); 
    }else{
         
        (<Bird>pet).fly();
    }
    

3. 自定义类型保护

  • 所谓类型保护,就是一些表达式,他们会在运行时检查以确保在某个作用域的类型。

  • 定义一个类型保护,我们只要简单地定义一个函数,返回值类型是一个类型谓词

  • 谓词为 parameterName is Type这种形式,parameterName必须是来自于当前函数签名里的一个参数名。

    function isFish(pet : Fish | Bird) : pet is Fish {
         
        return (<Fish>pet).swim != undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值