如果我有2个接口:
interface Person{
name: string;
}
interface Employee extends Person{
employeeId: string;
}
我想将一个人转换为员工:
function employPerson(person: Person, id: string): Employee
什么是最好的方法?
我认为这样做的标准方法是:
function employPerson(person: Person, id: string): Employee{
const employee = person as Employee
employee.employeeId = id;
return employee;
}
哪个有效,但这也有效:
function employPerson(person: Person, id: string): Employee{
const employee = person as Employee
return employee;
}
这显然是不对的.
我喜欢这种方法:
function employPerson(person: Person, id: string): Employee{
return {
...person,
employeeId: id
};
}
这可以确保我们拥有所有正确的属性,如果我更改Employee接口以添加新属性,则上述代码将正确错误.这个问题是我正在返回一个不同的对象 – 它是一个克隆.
如何在仍使用完全类型安全的同时向现有对象添加属性?
谢谢
最佳答案 Object.assign怎么样?
function employPerson(person: Person, id: string): Employee {
return Object.assign(person, {
employeeId: id
});
}