当前位置:网站首页>TypeScript-可辨识联合

TypeScript-可辨识联合

2022-06-11 07:54:00 YY小怪兽

详情可见
1.什么是可辨识联合

具有共同的可辨识特征。
一个类型别名, 包含了具有共同的可辨识特征的类型的联合。
interface Square {
    
    kind: "square"; // 共同的可辨识特征
    size: number;
}
interface Rectangle {
    
    kind: "rectangle"; // 共同的可辨识特征
    width: number;
    height: number;
}
interface Circle {
    
    kind: "circle"; // 共同的可辨识特征
    radius: number;
}

Shape就是一个可辨识联合
因为: 它的取值是一个联合
因为: 这个联合的每一个取值都有一个共同的可辨识特征

type Shape = (Square | Rectangle | Circle);

function aera(s: Shape) {
    
    switch (s.kind) {
    
        case "square": return s.size * s.size;
        case "rectangle": return s.width * s.height;
        case "circle": return  Math.PI * s.radius ** 2; // **是ES7中推出的幂运算符
    }
}

2.在企业开发中如果相对可辨识联合的完整性进行检查, 那么我们可以使用

为了需要写全部类型的判断,我们需要进行完整性检查,
当不完整的时候报错
function aera(s: Shape):number{
    
    switch (s.kind) {
    
        case "square": return s.size * s.size;
        // case "rectangle": return s.width * s.height;
        case "circle": return  Math.PI * s.radius ** 2; // **是ES7中推出的幂运算符
        default:return MyNever(s)
    }
}

方式一: 给函数添加返回值 + tsconfig.json中开启strictNullChecks

方式二: 添加default + never 不常用

function MyNever(x: never):never {
    
    throw new Error('可辨识联合处理不完整' + x);
}
function aera(s: Shape):number{
    
    switch (s.kind) {
    
        case "square": return s.size * s.size;
        case "rectangle": return s.width * s.height;
        case "circle": return  Math.PI * s.radius ** 2; // **是ES7中推出的幂运算符
        default:return MyNever(s)
    }
}
原网站

版权声明
本文为[YY小怪兽]所创,转载请带上原文链接,感谢
https://blog.csdn.net/lihui61357457/article/details/125160971