- 在企业开发中, 如果想对可辨识联合的完整性进行检查, 主要有两种实现方式分别如下
方式一
- 给函数添加返回值 + 开启
strictNullChecks
如果实现的不完整在编译器当中是会进行报错的:
// 正方形
interface Square {
// 共同的可辨识特征
kind: "square";
size: number;
}
// 长方形
interface Rectangle {
// 共同的可辨识特征
kind: "rectangle";
width: number;
height: number;
}
// 圆圈
interface Circle {
// 共同的可辨识特征
kind: "circle";
radius: number;
}
type Shape = (Square | Rectangle | Circle);
function area(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;
}
}
实现完整就不会报错:
方式二
- 添加 default + never
如果实现的不完整在编译器当中是会进行报错的:
// 正方形
interface Square {
// 共同的可辨识特征
kind: "square";
size: number;
}
// 长方形
interface Rectangle {
// 共同的可辨识特征
kind: "rectangle";
width: number;
height: number;
}
// 圆圈
interface Circle {
// 共同的可辨识特征
kind: "circle";
radius: number;
}
type Shape = (Square | Rectangle | Circle);
function MyNever(x: never): never {
throw new Error('可辨识联合处理不完整' + x);
}
function area(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;
default:
return MyNever(s)
}
}
实现完整就不会报错: