如何复制对象

时间:2017-05-20 16:15:33

标签: typescript

我正在使用打字稿编写应用程序,我正在尝试强烈键入Object.assign这样的调用:

let obj = new Author();
let x = Object.assign({}, obj);

我希望变量x属于Author类型。不幸的是,它的类型为Object

如果我这样做,我会得到一个合适的类型:

Object.assign<Author, Author>(new Author(), obj);

我甚至可以简化第一种类型的参数:

Object.assign<{}, Author>(new Author(), obj);

然而,这非常冗长(我需要手动指定类型)并强制我在分配之前创建Author对象。有没有其他方法来实现这一目标?或者是否有其他方法在打印原型时复制打字稿中的对象?

1 个答案:

答案 0 :(得分:1)

你的意思是这样的吗?也许我误解了你的问题,但是像这样,你会很好地结合类型/值退出

let test = {name: "value"};
let item = {hallo: "hallo", ...test};

也是这样的工作

// could be also defined as class
type Author = {name: string, value: string}

let authorValue = {value: "value"}
let authorName = {name: "name"}

let author: Author = {...authorName, ...authorValue};

当然,instanceof不起作用,因为这些类型不会被转换。

这里有一些更多的测试

class Author {
    constructor(public name, public value) {}
}
let authorName = {name: "name"}
let author = new Author("Franz", "Value");
let combined: Author = { ...author, ...authorName }
// false
console.log(combined instanceof Author);
Object.assign(author, authorName);
// true
console.log(author instanceof Author);