Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 一个';是';与使用';在';操作人员_Typescript - Fatal编程技术网

Typescript 一个';是';与使用';在';操作人员

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

我们可以使用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 ("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是允许的。

这似乎是合理的