Angular 关于Typescipt接口和计算属性(角度)的问题

Angular 关于Typescipt接口和计算属性(角度)的问题,angular,typescript,Angular,Typescript,我试图在typescript界面上实现一个计算机属性,但我似乎无法理解……我可能只是忽略了一些简单的东西,因为我正处于挫折的边缘,当我到达那个边缘时,我失去了注意力/ member.model.ts 会员服务 我可以调用memberService.login(),它会返回 id: 'test', name: { given: 'Authenticated', family: 'Member' } id: 'test', name: { given: 'Anonymous', f

我试图在typescript界面上实现一个计算机属性,但我似乎无法理解……我可能只是忽略了一些简单的东西,因为我正处于挫折的边缘,当我到达那个边缘时,我失去了注意力/

member.model.ts

会员服务

我可以调用
memberService.login()
,它会返回

id: 'test',
name: {
  given: 'Authenticated',
  family: 'Member'
}
id: 'test',
name: {
  given: 'Anonymous',
  family: 'Member'
}
我可以调用
memberService.logout()
并返回

id: 'test',
name: {
  given: 'Authenticated',
  family: 'Member'
}
id: 'test',
name: {
  given: 'Anonymous',
  family: 'Member'
}

…但无论我怎么做,似乎都无法显示
displayName
computed属性

在您的代码中,
成员是一个类,您不会通过将一个简单的javascript对象分配给一个字段来获得一个类实例。我看你加了一个?这里
displayName?()
。我相信您这样做是因为您无法将对象分配给ts类“asserion”。如果你想
this.member
有一个方法,你应该在那里放一个类实例,然后用字段填充它。不知怎的,这样做是可行的:

 constructor() {
   this.member = new Member();
   Object.assign(this.member, {/*... any fields you like */});
 }
现在您可以删除方法名称中的奇数
另外,不清楚您希望如何引用
displayName
属性。 如果您希望它作为一种方法,那么您的版本就可以了,但是如果您希望它作为一种计算属性,那么您可以使用下面的
get
关键字定义getter

get displayName(): string {
    return this.name.preferred ?? `${ this.name.given } ${ this.name.family }`;
 }

您需要在类中创建一些方法,以返回带有您的值的对象。这与
get
ters的返回方式非常相似

下面是一个正在发生的事情的例子:

类示例{
构造函数(){
this.foo='bar';
}
get bar(){return`${this.foo}和from getter`};
toObj(){
返回{…this,bar:this.bar};
}
}
const samp=新样本();
console.log(samp);//不在场
console.log(samp.bar);//但它就在那里?
console.log(JSON.stringify(samp));//但它不在那里!

console.log(samp.toObj());//就在那里是的,方法名称中的“奇怪”对我来说也很奇怪,但这是我唯一能让它编译而不出错的方法。EA,我在尝试通过POST发送有效负载时遇到了非常类似的问题,而我的
get
ER没有通过。您必须创建某种类型的
.toJSON
方法或将返回带有属性的实际对象的东西。