比如下面这个例子:
class A{
a1: string;
a2: stirng;
...
c: string;
}
class B{
a1: string;
a2: stirng;
...
b: string;
}
var a = new A();
a.a1 = '1';
a.a2 = '2';
a.c = '2';
var b = ?
如何只将 A.a1 A.a2 等 B 中存在的属性赋值给 b 呢?
我试过
var b = <B><any>a;
var b = a as B;
Object.assign(b,a);
这些方法都会将 B 中不存在的属性 A.c 也复制过去
首先要说明的是 TypeScript 是要转成 JavaScript 来运行的,所以 TypeScript 中提供的很多特性也只不过是在 tsc(转译) 的阶段使用,比如你上面定义的两个类,转成 JavaScript 之后实际是两个空类
所以,实际上 JavaScript 解释器并不知道在 TypeScript 中为
A
或B
定义的属性,因为类型相关的声明都在 tsc 过程中被擦除了。从另一个方面,如果存在两个对象
a
和b
(不管它们是不是A
和B
的实例),要把b
中存在的属性从a
中拷贝过来,可以这样输出