TypeScript:基于泛型实现指定尺寸方阵类,编译期校验尺寸合法性
问题:实现支持泛型尺寸的方阵类,编译期校验尺寸合法性
我希望实现一个支持泛型尺寸的方阵类,同时实现矩阵间的标准运算方法(加法、乘法),但仅允许同尺寸矩阵进行运算。核心目标是:
- 将所有尺寸的矩阵类型统一到单个类中
- 在编译期而非运行时捕获尺寸不匹配的错误
我尝试用联合类型作为泛型参数,比如class Matrix<S = 3|4>,但不知道如何在类中判断S具体是3还是4并做对应处理。我知道可以通过抽象类+多个尺寸子类的方式实现,但这种写法太繁琐了……
补充说明(实用提示)
我已经找到可行的解决方案,这里补充一个帮助他人实现编译期校验乘法的技巧:通过在方法中添加泛型参数,约束矩阵乘法的尺寸合法性,示例代码如下:
type Size = 1|2|3|4; class Matrix<I extends Size, J extends Size> { readonly iMax: I; readonly jMax: J; // 矩阵元素存储(例如用二维数组) constructor(iMax: I, jMax: J){ this.iMax = iMax; this.jMax = jMax; // 初始化矩阵元素的逻辑 } mult<K extends Size>(x: Matrix<J,K>): Matrix<I,K>{ // 实现矩阵乘法的计算逻辑 return new Matrix(this.iMax, x.jMax); // 示例返回,需替换为实际计算 } } // 编译期错误:第一个矩阵的列数(3)和第二个矩阵的行数(2)不匹配 new Matrix(3,3).mult(new Matrix(2,2));
内容的提问来源于stack exchange,提问作者Théo Marty
相关产品推荐
相关产品推荐

