打字稿界面分配

时间:2017-08-02 22:58:00

标签: typescript interface

在我的代码中。我有这样的界面。

interface MyFlag {
   flag1: boolean,
   flag2: boolean
}

在我的代码中我这样做。

let myFlag: MyFlag = {"flag1":true, "flag2": true};
let dummy = myFlag;
console.log("dummy: " + JSON.stringify(dummy));
myFlag = {"flag1": false, "flag2": false};
console.log("dummy2 : " + JSON.stringify(dummy));

以下是我的日志结果:

dummy: {"flag1":true, "flag2": true};
dummy2 : {"flag1":false, "flag2": false}; 

我无法理解的是,如何来虚拟"我改变myFlag时正在改变这个值。

我的问题是"有没有办法让“假”'保持之前指定的值。我的猜测是因为它是一个界面。

帮助表示赞赏。

干杯和问候,

SD

1 个答案:

答案 0 :(得分:0)

  

我无法理解的是,当我改变myFlag时,“虚拟”是如何改变价值的。

将新对象分配给dummy时,

myFlag不应该更改,但是当您更改myFlag的内部状态时,它应该会发生变化。

以下是您发布但已转换为JavaScript的代码。在代码中,您要将新对象分配给myFlag,而dummy的值不会更改。 (这与您在答案中报告的行为不同。)

var myFlag = {
    "flag1": true,
    "flag2": true
};

var dummy = myFlag;
console.log("dummy: " + JSON.stringify(dummy));

myFlag = { "flag1": false, "flag2": false };
console.log("dummy2 : " + JSON.stringify(dummy));

// dummy: {"flag1":true,"flag2":true}
// dummy2 : {"flag1":true,"flag2":true}

您可能正在经历1.更改变量引用的对象的状态和2.更改变量包含的引用的值之间的区别。这是一个说明性的例子:

let foo = {
    value: "first"
};

// at this point, foo and bar hold references to the same object
let bar = foo;

console.log(foo.value + " " + bar.value); // first first

// here, we are changing the internal state of that object
// both variables change
foo.value = "second";
console.log(foo.value + " " + bar.value); // second second

// here, we are changing the value of the reference that foo contians
// at this point, foo and bar hold references to different objects 
foo = {
    value: "third"
};

console.log(foo.value + " " + bar.value); // third second

// here, we are changing the internal state of bar's object
// which has no impact on the internal state of foo's object
bar.value = "fourth";
console.log(foo.value + " " + bar.value); // third fourth