TypeScript函数类型定义报错:如何不修改Square对象指针比较v1与v2?
解决TypeScript函数类型定义错误及Square对象比较问题
首先纠正语法错误
你写的compareTo接口里参数加了const,这是TypeScript不允许的——在定义函数类型的接口时,参数只需要指定类型,不能用const/let这类修饰符,这些修饰符是在函数实现时用来限制参数是否能被重新赋值的,不是类型定义的一部分。
正确的接口写法应该是:
interface Square { readonly color: string; readonly area: number; } interface CompareTo { (v1: Square, v2: Square): number; }
不改变对象指针的前提下比较v1和v2
因为Square的属性是readonly,只是限制我们不能修改属性值,也不能把v1/v2指向新的对象(不过我们本来也不需要这么做),完全可以直接读取它们的属性值来做比较。
比如实现一个比较函数,按照面积优先、颜色次之的规则排序:
const compareSquares: CompareTo = (v1, v2) => { // 先比较面积大小 if (v1.area > v2.area) return 1; if (v1.area < v2.area) return -1; // 面积相等时比较字符串形式的颜色 return v1.color.localeCompare(v2.color); };
这个函数里我们只是读取v1和v2的area、color属性值做对比,既没有修改对象的属性,也没有改变v1/v2指向的指针,完全符合你的需求。
内容的提问来源于stack exchange,提问作者overexchange




