如果你有一个班级
export class Address {
id: number;
addrLine1: string;
addrLine2: string;
...
}
创建对象后
const address = new Address();
您可以通过向Address
类
address['addrLine3'] = 'some value';
我想只保留对象中Address
类的一部分键(在实例化之后的时间)。
意思是,我想从addrLine3
对象中删除address
密钥。
如果我们能够反思地列出班级Address
的所有字段,但这似乎不可能,或者是吗?
或者,还有其他办法吗?
一种方法是使用所需的键创建一个Address
类的对象并与该对象进行比较,但这不是最好的方法!
答案 0 :(得分:0)
您不需要针对这种特殊情况进行反思 - 您只需要一个新的干净地址对象,它不会有任何顽皮的附加属性。
class Address {
id: number = 0;
addrLine1: string = '';
addrLine2: string = '';
}
const addr1 = new Address();
addr1.addrLine1 = 'One';
addr1.addrLine2 = 'Two';
addr1['addrLine3'] = 'Line Three!';
function getCleanAddress(address: Address): Address {
const cleanAddress = new Address();
for (const prop in cleanAddress) {
cleanAddress[prop] = address[prop];
}
return cleanAddress;
}
const addr2 = getCleanAddress(addr1);
// Object { id: 0, addrLine1: "One", addrLine2: "Two", addrLine3: "Line Three!" }
console.log(addr1);
// Object { id: 0, addrLine1: "One", addrLine2: "Two" }
console.log(addr2);
警告......您需要确保空实例上的所有属性都有值,否则TypeScript编译器会优化它们。
答案 1 :(得分:0)
以下是如何使用数组生成动态行数的示例, 但您可以考虑将线存储到地图中。
class AddressExample {
constructor(
private _id: number,
private _lines: string[]
){
}
public addLine(line:string){
this._lines.push(line);
}
public removeLastLine(){
this._lines.pop();
}
public removeLine(index:number){
this._lines.splice(index, 1);
}
public toNeededFormat(){
let result = {
id: this._id,
};
this._lines.forEach((line: string, index:number) => {
result['addrLine'+index] = line;
});
return result;
}
}