Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 对象相等比较类型脚本。无法将对象属性应用于泛型类型_Typescript_Generics_Equals - Fatal编程技术网

Typescript 对象相等比较类型脚本。无法将对象属性应用于泛型类型

Typescript 对象相等比较类型脚本。无法将对象属性应用于泛型类型,typescript,generics,equals,Typescript,Generics,Equals,为了更好地理解Javascript中的对象比较,以及typescript的属性访问,我试图从这个起点为我的类创建一个平等的比较器 我知道这可以通过stringify和loadash来实现,但我发现挖掘对象属性以应用逻辑很有趣 这是比较两个对象的代码(来自上面的链接): 因此,在声明private equals(x:T,y:T):boolean{中,我可以修复编译错误 但如果是这样,这里的论点就不合适了: if (!this.equals(x[p], y[p])) { r

为了更好地理解Javascript中的对象比较,以及typescript的属性访问,我试图从这个起点为我的类创建一个平等的比较器

我知道这可以通过stringify和loadash来实现,但我发现挖掘对象属性以应用逻辑很有趣

这是比较两个对象的代码(来自上面的链接):

因此,在声明
private equals(x:T,y:T):boolean{
中,我可以修复编译错误

但如果是这样,这里的论点就不合适了:

    if (!this.equals(x[p], y[p])) {
        return false;
      }
由于p的类型为
常量p:Extract
(通过typescript intellisense onHover)

如果我用我的类类型替换泛型(它是
Vec3
类,但是不相关),尽管它有一个构造函数,我仍然会出现错误:

类型“Vec3.ts(2339)”上不存在属性“hasOwnProperty”

类型“Vec3.ts”(2339)上不存在属性“constructor”

如果我应用接口以避免对象属性错误,我将获得以下错误:


要使其正常工作,请尝试下一个代码:

类型索引={
[索引:字符串]:未知
}
常数等于=(x:T,y:T)=>{
//…您的代码
}
你只需要确定你的论点实际上是对象

请看一看

更新 尝试:

类型索引={
[索引:字符串]:已索引
}

我觉得有点脏,但如果你能告诉我你想要实现什么,也许我会提供更好的解决方案,让它发挥作用,试试下面的代码:

类型索引={
[索引:字符串]:未知
}
常数等于=(x:T,y:T)=>{
//…您的代码
}
你只需要确定你的论点实际上是对象

请看一看

更新 尝试:

类型索引={
[索引:字符串]:已索引
}

我有点脏,但是如果你能解释一下你想要实现什么,也许我会提供更好的解决方案

如果泛型扩展了类型,那么我会在代码的另一部分得到一个错误,因为参数类型不适合(equals似乎是递归调用的,属性在方法中作为字符串传递)。有人解释过,但我添加了一个屏幕截图来澄清。很多感谢,就像我所理解的,T类型可以是任何值?我的意思是:数组、字符串、数字、函数等…?所以x和y是具有3个属性的对象?所以你根本不需要使用泛型T。让我们来看看。如果泛型扩展了类型,那么我在代码的另一部分会得到一个错误,因为argumnts类型Not fit(equals似乎是递归调用的,属性在方法中作为字符串传递)有人解释过,但我添加了一个屏幕截图来澄清。很多感谢就像我理解的一样,T类型可以是任何值?我的意思是:数组、字符串、数字、函数等等?所以x和y是具有3个属性的对象?所以你根本不需要使用泛型T。让我们来看看。
interface ObjectPropertiesHandlable {
  constructor: void;
  hasOwnProperty: void;
}
    if (!this.equals(x[p], y[p])) {
        return false;
      }