You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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);
};

这个函数里我们只是读取v1v2areacolor属性值做对比,既没有修改对象的属性,也没有改变v1/v2指向的指针,完全符合你的需求。

内容的提问来源于stack exchange,提问作者overexchange

火山引擎 最新活动