Typescript:为什么/如何用户定义的“Type Guard”的返回类型比返回布尔值更好?

cdmah0mi  于 2023-02-25  发布在  TypeScript
关注(0)|答案(1)|浏览(116)

this tutorial开始:用户定义的类型保护函数是返回"arg is aType"的函数。例如:

function isCustomer(partner: any): partner is Customer {
    return partner instanceof Customer;
}
function signContract(partner: BusinessPartner): string {
    let message: string;
    if (isCustomer(partner)) {
        message = partner.isCreditAllowed() ? 'Sign a new contract with the customer' : 'Credit issue';
    } else {
        message = partner.isInShortList() ? 'Sign a new contract with the supplier' : 'Need to evaluate further';
    }

    return message;
}

为什么"partner is Customer"的返回类型比简单地返回一个布尔值更有优势?

ilmyapht

ilmyapht1#

这条线

message = partner.isCreditAllowed() ? 'Sign a new contract with the customer' : 'Credit issue';

这是本教程的重点。
通常,在调用isCreditAllowed之前,必须将partner强制转换为Customer类型。但是,因为在isCustomer返回类型上有一个类型保护,所以TypeScript可以免除强制转换的需要。
typeof A === B这样的表达式隐式地带有这些保护,但是通过用函数调用替换条件,你必须在isCustomer的返回类型中声明,从而将信息"放回"表达式中。对于编译器来说,boolean本身是不够的。

相关问题