代码之家  ›  专栏  ›  技术社区  ›  tru7

负用户定义类型保护

  •  3
  • tru7  · 技术社区  · 6 年前
    function isFish(pet: Fish | Bird): pet is Fish {
        return (<Fish>pet).swim !== undefined;
    }
    

    告诉typescript宠物类型是 Fish

    有没有一种方法可以说明相反的情况,即输入参数不是fish?

    function isNotFish(pet: Fish | Bird): pet is not Fish {  // ????
           return pet.swim === undefined;
    }
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   Titian Cernicova-Dragomir    6 年前

    你可以使用 Exclude 从联合中排除类型的条件类型:

    function isNotFish(pet: Fish | Bird): pet is Exclude<typeof pet, Fish>    
    { 
        return pet.swim === undefined;
    }
    

    或者更通用的版本:

    function isNotFishG<T>(pet: T ): pet is Exclude<typeof pet, Fish>    { 
        return pet.swim === undefined;
    }
    interface Fish { swim: boolean }
    interface Bird { crow: boolean }
    let p: Fish | Bird;
    if (isNotFishG(p)) {
        p.crow
    }
    
        2
  •  2
  •   Oscar Paz    6 年前

    您可以使用相同的函数来完成此操作,但该函数只是重新运行 false .

    推荐文章