Typescript 一个';是';与使用';在';操作人员
我们可以使用TypeGuards来区分类型 本文档给出了使用Typescript 一个';是';与使用';在';操作人员,typescript,Typescript,我们可以使用TypeGuards来区分类型 本文档给出了使用is谓词和使用in运算符的示例 是谓词: function isFish(pet: Fish | Bird): pet is Fish { return (pet as Fish).swim !== undefined; } if (isFish(pet)) { pet.swim(); } else { pet.fly(); } function move(pet: Fish | Bird) { if
is
谓词和使用in
运算符的示例
是
谓词:
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}
function move(pet: Fish | Bird) {
if ("swim" in pet) {
return pet.swim();
}
return pet.fly();
}
中的操作员:
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}
function move(pet: Fish | Bird) {
if ("swim" in pet) {
return pet.swim();
}
return pet.fly();
}
中的
操作符看起来更简洁、更简单,尽管从长远来看,将类型区分明确地拉入函数中可能会有帮助,也更容易维护
是否存在is
谓词可以区分in
运算符不能区分的类型的情况 in
运算符中的只是缩小变量类型的一种方法。您可以使用您喜欢的任何检查写入类型保护:
type JSONPrimitive=number | string | boolean | null;
函数isJsonPrimitive(x:any):x是JSONPrimitive{
返回x==null
||x的类型==='number'
||x的类型==='string'
||x的类型=='布尔';
}
或:
这两个示例都不能使用
中的运算符进行等效重写
也就是说,用户定义的类型保护类似于,因为Typescript不会检查它们的正确性。因此,您可以在类型保护的实现中使用您喜欢的任何逻辑;即使是无条件的也会返回true代码>是允许的。这似乎是合理的