在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是字符串"等在任何其他情况下?
答案 0 :(得分:5)
常规型护卫让你这样做:
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
}
}
所以你可以使用typeof
或instanceof
,但是这样的接口怎么样:
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
}
}