设计思路
- 属性类型一致性:对于不同图形,将相同性质的属性(如位置、颜色等)使用相同或相似的类型定义。例如,所有图形都可能有位置相关属性,可统一使用
Point
类型来表示位置。
- 方法类型一致性:类似的操作,如绘制方法,定义统一的方法签名,这样在使用图形对象时,调用方式保持一致,便于理解和维护。
关键代码示例
// 定义点类型
type Point = {
x: number;
y: number;
};
// 定义颜色类型
type Color = string;
// 圆形类型别名
type Circle = {
type: 'circle';
center: Point;
radius: number;
color: Color;
draw: () => void;
};
// 矩形类型别名
type Rectangle = {
type:'rectangle';
topLeft: Point;
width: number;
height: number;
color: Color;
draw: () => void;
};
// 三角形类型别名
type Triangle = {
type: 'triangle';
vertices: Point[];
color: Color;
draw: () => void;
};
// 统一的图形类型联合
type Shape = Circle | Rectangle | Triangle;
// 示例函数,接收任意图形并调用其绘制方法
function drawShape(shape: Shape) {
shape.draw();
}
通过类型别名一致性提升库质量
- 可读性:开发人员能快速理解不同图形类型的结构和行为,因为属性和方法的命名及类型定义遵循统一模式。
- 可维护性:当需要修改或扩展功能时,由于类型定义的一致性,对一处的修改可以更容易地应用到其他类似类型上,减少出错概率。例如,如果要为所有图形添加一个
fill
方法,只需在统一的方法签名处添加,各图形类型自动遵循。