Angular 关于Typescipt接口和计算属性(角度)的问题
我试图在typescript界面上实现一个计算机属性,但我似乎无法理解……我可能只是忽略了一些简单的东西,因为我正处于挫折的边缘,当我到达那个边缘时,我失去了注意力/ member.model.ts 会员服务 我可以调用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
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
方法或将返回带有属性的实际对象的东西。