关键字"是"在TypeScript函数的返回类型中

时间:2016-12-01 08:49:02

标签: function typescript

在VSCode的源文件中,有一些函数具有特定的返回类型规范,如下所示:

export function isString(str: any): str is string {
  if (typeof (str) === _typeof.string || str instanceof String) {
    return true;
  }

  return false;
}

所以我想知道&#34的目的是什么; str是string"而不只是写"布尔"。

我们可以使用" str是字符串"等在任何其他情况下?

1 个答案:

答案 0 :(得分:5)

这称为User-Defined Type Guards

常规型护卫让你这样做:

function fn(obj: string | number) {
    if (typeof obj === "string") {
        console.log(obj.length); // obj is string here
    } else {
        console.log(obj); // obj is number here
    }
}

所以你可以使用typeofinstanceof,但是这样的接口怎么样:

interface Point2D {
    x: number;
    y: number;
}

interface Point3D extends Point2D {
    z: number;
}

function isPoint2D(obj: any): obj is Point2D {
    return obj && typeof obj.x === "number" && typeof obj.y === "number";
}

function isPoint3D(obj: any): obj is Point2D {
    return isPoint2D(obj) && typeof (obj as any).z === "number";
}

function fn(point: Point2D | Point3D) {
    if (isPoint2D(point)) {
        // point is Point2D
    } else {
        // point is Point3D
    }
}

code in playground