如果我们有这些类型:
interface Person {
name: string;
}
interface Agent extends Person {
code: number;
}
并有以下代码:
const agent: Agent = {
name: 'name',
code: 123
}
如何将 Agent
类型转换为 Person
并删除代码字段?当我尝试这样做时:
const person: Person = agent as Person
console.log(person) // Still contains the fields of agent
这是一个简单的示例,但在我的实际用例中,该对象具有更多字段。我也尝试过:
person: Person = {
...agent
}
我看过的另一篇文章不适用于我的案例: Restrict type by super class in interface .
最佳答案
类型转换并不意味着类型转换后的真实值(value)会改变。开发者可以告诉 TypeScript“相信我,我知道里面是什么”。它仅在开发期间才有意义,而在运行时则没有意义。
对于开发部分,也许 Utility Types会有帮助的。例如,您可以这样做(如果您想将 Agent
中的一些字段保留在 Person
内):
type Person = Pick<Agent, "name"|"address">;
关于TypeScript 将子类型转换为父类(super class)型并删除额外的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71222416/