分配变量的简写

时间:2013-07-15 11:07:35

标签: typescript

当我有这段代码时

interface Foo1 {
    a: string;
    b: boolean
    c: Object;
}

interface Foo2 extends Foo1 {
    d: number;
}

我可以用一些简写方法将变量从像Foo1创建的对象分配给新创建的对象类型Foo2吗?

当我有10个属性的对象时,这有点烦人。

var test1: Foo1 = { a: '...', b: true, c: {} };

var test2: Foo2 = { a: test1.a, b: test1.b, c: test1.c, d: 3 };

1 个答案:

答案 0 :(得分:1)

TypeScript允许您在这种情况下投射项目......虽然这意味着test1test2是同一个对象。

interface Foo1 {
    a: string;
    b: boolean
    c: Object;
}

interface Foo2 extends Foo1 {
    d: number;
}

var test1: Foo1 = { a: '...', b: true, c: {} };

var test2: Foo2 = <Foo2> test1;
test2.d = 1;

如果您想要一个副本,而不是同一个对象,您可以创建一个方法来复制对象的属性。这是一个副本的例子:

var test1: Foo1 = { a: '...', b: true, c: {} };

var test2: Foo2 = <Foo2>{};
for (var variable in test1) {
    if( test1.hasOwnProperty( variable ) ) {
        test2[variable] = test1[variable];
    }
}

通过一些泛型,您可以将其封装在静态帮助器方法中,如下所示:

class ObjectHelper {
    static copy<TFrom, TTo>(from: TFrom) : TTo {
        var to = <TTo> {};
        for (var variable in from) {
            if(from.hasOwnProperty(variable)) {
                to[variable] = from[variable];
            }
        }
        return to;
    }
}

var test1: Foo1 = { a: '...', b: true, c: {} };
var test2: Foo2 = ObjectHelper.copy<Foo1, Foo2>(test1);