您可以将整个 "this" 关键字设置为打字稿类构造函数中的对象吗?



我有一个获取json用户数据的服务,我想在对象上添加一些方法。我正在考虑通过为用户数据创建一个类来做到这一点,并将我从 json 获得的对象传递到我的构造函数中,如下所示:

class UserData {
constructor(userData){
this = userData
}
getNode1(){
return this.textNodes.node1;
}
}

在我的服务中,我有这样的代码

import { Injectable } from '@angular/core';
import { UserData } from 'wherever';
@Injectable({
providedIn: 'root'
})
export class UserDataService {
userData;
constructor() { 
let backendData = {
textNodes: {
node1: "some text",
node2: "some other text"
}
}
this.userData = new UserData(backendData);
}
}

我试过但得到此错误:模块解析失败:分配给右值。

我可以只做整个对象,每个字段都喜欢这样:this.textNodes.node1 = backendData.textNodes.node1每个字段,但这是一个巨大的丑陋对象。

有没有人有干净的方法来做到这一点?

this设置为等于类中的任何内容将永远行不通。this是对当前所在类的引用,因此您将关闭对自身的引用。你可以尝试这样的事情:

class UserData {
private userData: UserDataInterface;
constructor(userData: UserDataInterface){
this.userData = userData
}
getNode1(){
return this.userData.textNodes.node1;
}
}
interface UserDataInterface {
textNodes: {
node1: any;
node2: any
};
}

从我在这里看到的,您有 2 个简单的解决方案:

1-使用对象分配功能。

this.userData = Object.assign(new UserData(), backendData);

2-如果您的数据来自http请求并且您正在使用HttpClient,只需执行以下操作

即可
this.http.get<UserData>(backendUrl)... etc

如果会自动为您反序列化它。

我希望我对您有所帮助。

最新更新