如果我有2个接口:
interface Person{
name: string;
}
interface Employee extends Person{
employeeId: string;
}
我希望将Person转换为en Employee:
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
接口以添加新属性,则上述代码将正确错误。这个问题是我正在返回一个不同的对象 - 它是一个克隆。
如何在仍然使用完全类型安全的情况下向现有对象添加属性?
由于
答案 0 :(得分:1)
function employPerson(person: Person, id: string): Employee {
return Object.assign(person, {
employeeId: id
});
}
怎么样?
df$document = factor(df$document, levels=sort(as.numeric(df$document)))