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

时间:2017-08-04 08:54:50

标签: typescript

如果我有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接口以添加新属性,则上述代码将正确错误。这个问题是我正在返回一个不同的对象 - 它是一个克隆。

如何在仍然使用完全类型安全的情况下向现有对象添加属性?

由于

1 个答案:

答案 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)))