当我有这段代码时
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 };
答案 0 :(得分:1)
TypeScript允许您在这种情况下投射项目......虽然这意味着test1
和test2
是同一个对象。
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);