从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"的返回类型比简单地返回一个布尔值更有优势?
1条答案
按热度按时间ilmyapht1#
这条线
这是本教程的重点。
通常,在调用
isCreditAllowed
之前,必须将partner
强制转换为Customer
类型。但是,因为在isCustomer
返回类型上有一个类型保护,所以TypeScript可以免除强制转换的需要。像
typeof A === B
这样的表达式隐式地带有这些保护,但是通过用函数调用替换条件,你必须在isCustomer
的返回类型中声明,从而将信息"放回"表达式中。对于编译器来说,boolean
本身是不够的。