Object Equality in Typescript [duplicate]

一个人想着一个人 提交于 2019-12-08 19:20:40

问题


I'm creating a lib on vectors in typescript. My very first test failed:).

It's related to object equality in TypeScript/JavaScript but I can't find a way to make the test green. No object equality is mentioned in typescript's official doc http://www.typescriptlang.org/Handbook#classes.

Could someone please give me a hand ?

This is the source code.

class Vector {
    x: number;
    y: number;

    constructor(x: number, y: number) {
        this.x = x;
        this.y = y;
    }

    add(that: Vector) {
        return new Vector(this.x + that.x, this.y + that.y);
    }
}

export = Vector;

Then I have a unit test on this class as follows

 var Vector = require("../lib/vector")

 describe("vector", function () {
  it("should add another vector", function () {
    var v1 = new Vector(1, 1);
    var v2 = new Vector(2, 3);
    expect(v1.add(v2)).toEqual(new Vector(3, 4));
  });
});

When executed obtains the following error

Failures: 
1) vector should add another vector
1.1) Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).

回答1:


Your test case should work. Here it is passing on jsfiddle.

However, it seems your actual code was using toBe() instead of toEqual(), since the failure message says "to be" and not "to equal":

Expected Vector({ x: 3, y: 4 }) to be Vector({ x: 3, y: 4 }).

Using toBe() will check that the identity of the two objects are the same (ie ===), which they obviously are not. You definitely want toEqual() which does a deep comparison of values.




回答2:


TypeScript object equality is the same as JavaScript object equality. This is because TypeScript is just JavaScript.



来源:https://stackoverflow.com/questions/35903941/object-equality-in-typescript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!