0

当我有这个代码

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 };
4

1 回答 1

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);
于 2013-07-15T12:12:21.030 回答