考虑一个示例(操场上的代码是here)
interface Square {
kind: 'square';
size: number;
}
interface Rectangle {
kind: 'rectangle';
width: number;
height: number;
}
type Shape = Square | Rectangle;
function calculateArea(shape: Shape) {
if (shape.kind === 'square') {
console.log(`area: ${shape.size ** 2})`);
}
}
function calculateArea2(shape: Shape) {
const { kind } = shape;
if (kind === 'square') {
console.log(`area: ${shape.size ** 2})`);
}
}
calculateArea
可以正常工作,可以将Shape
完美地投射到Square
中。
但是在第二个功能calculateArea2
kind
中,类型防护被分配给了临时const变量,它破坏了自动类型防护。
如何将类型保护分配给变量并仍然受益于自动类型检测?