typescript:类型细化
在TypeScript中,类型细化是一种通过使用类型守卫来减少类型并提供更具体的类型检查的方法。这通常是通过使用typeof
、instanceof
或自定义类型守卫来实现的。
以下是一个使用typeof
进行类型细化的例子:
// 定义一个接口
interface Circle {
kind: "circle";
radius: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
// 定义一个联合类型
type Shape = Circle | Rectangle;
// 函数,根据shape的kind来判断并细化类型
function area(shape: Shape): number {
if (shape.kind === "circle") {
// 在这里,shape的类型被细化为Circle
return Math.PI * shape.radius ** 2;
} else {
// 在这里,shape的类型被细化为Rectangle
return shape.width * shape.height;
}
}
// 使用
const circle: Circle = { kind: "circle", radius: 4 };
const rectangle: Rectangle = { kind: "rectangle", width: 10, height: 20 };
console.log(area(circle)); // 正确
console.log(area(rectangle)); // 正确
在这个例子中,area
函数接受一个Shape
类型的参数。通过在函数体内使用typeof
来细化shape
参数的类型,从而使得编译器能够根据shape.kind
的值来识别shape
参数的确切类型,并对其进行相应的类型检查。这种类型细化的方法有助于提高代码的类型安全性和可读性。
评论已关闭