如果我有 2 个接口:
interface Person{
name: string;
}
interface Employee extends Person{
employeeId: string;
}
Run Code Online (Sandbox Code Playgroud)
我想将 Person 转换为 en Employee:
function employPerson(person: Person, id: string): Employee
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我认为这样做的标准方法是:
function employPerson(person: Person, id: string): Employee{
const employee = person as Employee
employee.employeeId = id;
return employee;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这也有效:
function employPerson(person: Person, id: string): Employee{
const employee = person as Employee
return employee;
}
Run Code Online (Sandbox Code Playgroud)
这显然是不对的。
我喜欢这种方法:
function employPerson(person: Person, id: string): Employee{
return {
...person,
employeeId: id
};
}
Run Code Online (Sandbox Code Playgroud)
这确保我们拥有所有正确的属性,如果我更改Employee界面以添加新属性,上述代码将正确出错。问题在于我返回了一个不同的对象——它是一个克隆。
如何在仍然使用完整类型安全的同时向现有对象添加属性?
谢谢
怎么样Object.assign?
function employPerson(person: Person, id: string): Employee {
return Object.assign(person, {
employeeId: id
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |