gpt4 book ai didi

Javascript/Typescript - 获取对象属性可见性和类型

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:08 27 4
gpt4 key购买 nike

我的问题:

我需要区分 typescript 类的私有(private)、公共(public)和 getter (get X()) 属性。

我的项目:

我有一个 Angular 项目,它有一个模型设计模式。阿卡。用户模型看起来像这样

class UserModel extends BaseModel {
private _id: number;

get id() { return this._id; }
set id( _id: number ) { this._id = _id; }
}

为了将这些模型发送到后端,我只是对它们进行 JSON.stringify(),如果用户 ID 设置为 13,则返回一个这样的对象

{
_id: 13
}

现在我需要修改 UserModel 上的 toJSON() 函数,这样我就不会返回对象的私有(private)属性,而是只返回 get X() 变量。输出应如下所示。

{
id: 13
}

我创建了这个简单的函数来检索对象的所有属性,但这同时为我提供了私有(private)属性和获取属性。

abstract class BaseModel {
public propsToObj() : {[key: string]: any} {
let ret: any = {};

for (var prop in this) {
ret[prop] = this[prop];
}

return ret;
}
}

toJSON 函数如下所示

class UserModel extends BaseModel {
private _id: number;

get id() { return this._id; }
set id( _id: number ) { this._id = _id; }

toJSON() {
return this.propsToObj();
}
}

将 UserModel 字符串化的结果如下所示

{
_id: 13,
id: 13
}

总而言之,我需要知道类属性的可见性和类型(getter 还是常规变量?),我该如何实现?

最佳答案

你的 propsToObj() 工作错误,它只获取所有属性,你需要更改它以便它只获取 getter,例如你可以使用这个

abstract class BaseModel {
public propsToObj() : {[key: string]: any} {
let ret: any = {};

for (const prop in this) {
const descriptor = Object.getOwnPropertyDescriptor(this.constructor.prototype, prop);
if (descriptor && typeof descriptor.get === 'function') {
ret[prop] = this[prop];
}
}
return ret;
}
}

Object.getOwnPropertyDescriptor 将获取属性的描述符,您可以从中检查描述符中是否有 get 函数,如果是,则您的属性是 getter,如果不是,则为常规属性,您可以在这里阅读更多关于描述符的信息 MDN(descriptors)

你问的最后一个问题

I need to know the visibility and type of properties on a class, how would I achieve this?

据我所知,您无法获得属性的可见性,至于类型,如果您想知道属性的数据类型,您可以使用 typeof

propsToObj() 方法中的示例:

public propsToObj() : {[key: string]: any} {
let ret: any = {};

for (const prop in this) {
const descriptor = Object.getOwnPropertyDescriptor(this.constructor.prototype, prop);
if (descriptor && typeof descriptor.get === 'function') {
ret[prop] = this[prop];
console.log(typeof ret[prop]); // just exaple how you can know type you can save it with property too if you need it
}
}
return ret;
}

关于Javascript/Typescript - 获取对象属性可见性和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53893646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com