在Typescript中从一种类型转换为另一种类型的最佳实践方法

如果我有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
    });
}
点赞