我有一个这样的用户界面
interface IUser {
name: string,
phoneNumber: string
}
和像这样的公共用户界面
interface IPublicUser {
name: string
}
我正在尝试做的是从类型IUser
仅返回公共信息的对象。
我尝试了这样的事情:
const user: IUser = {
name: 'Eliott',
phoneNumber : '+1...'
}
console.log(user as unknown as IPublicUser)
但始终返回完整用户。
我的临时解决方法是创建一个方法toPublicJson
只返回所需的字段,但它不是很好,因为如果我的界面发生变化,我也必须改变这个方法。
你有什么建议吗?
谢谢
你必须记住,TypeScript 编译为 JavaScript。像variable as type
这样的陈述在转译中迷失了方向。它们只是对转译者和用户的提示,但它们实际上没有任何意义。同样,接口只是编译器的提示和帮助,因为它们在运行时实际上没有任何意义。
如果要执行此操作,仍然必须手动执行此操作,以创建具有所需属性的另一个对象:
const publicUser : IPublicUser = { name: user.name };
当然,你可能只关心其他程序员在处理你的代码时看到的内容,所以,这样,他们只会看到IPublicUser
,如果他们想使用不在那个接口中的属性,他们会得到一个编译器错误。但是,如果您关心代码执行时真正发生的事情,那么您必须明确地执行此操作。