gpt4 book ai didi

javascript - 削减 JSON 对象以声明方式发送到 Typescript 中的客户端?

转载 作者:行者123 更新时间:2023-12-01 03:02:23 25 4
gpt4 key购买 nike

所以我遇到了一个我认为常见的困境。我有一个数据库对象,一个来自文档数据库的常规 JS 对象,然后我想将该对象发送到我的客户端。但有些字段是敏感字段,不能透露给客户。

在 C# 世界中,我只需使用声明性反射编程将属性附加到我的 C# 对象,指示哪些字段对于客户端使用是安全的,如下所示:

[SafeForClient]
string MyProperty { get; set; } // send to client.

string SecretData { get; set; } // Do NOT send to client.

然后,我将使用反射来收集所有 [SafeForClient] 属性,构建 JSON,并将其发送到网络。

但在 JavaScript 世界中就没有这样的运气了。这个级别上没有声明性元编程。

我在 TypeScript 中定义了这样的类型:

export type RoomForClient = {
id: number;
name: string;
description: string;
exits: {[index in Direction]?: Exit }
}

export type Room = RoomForClient & {
hiddenFlags: ScriptData;
}

发送给客户端的所有房间数据只是整个房间数据的子集。目前,我有一个不应该包含的属性,这还不错......我可以轻松地从对象中删除该属性。但将来,当添加更多内容时......我将需要在两个地方添加这些属性名称;一次在 Room 定义中,一次在实际削减它的方法中。

如果我有一个“Room”对象,而不手动指定我应该或不应该复制的所有字段,如何创建“RoomForClient”对象?所有这些类型信息都会在运行时被删除,所以说实话,我想不出一种在不违反 DRY 原则的情况下做到这一点的方法。我认为这是一种代码味道。

有什么想法吗?

最佳答案

您可以考虑使用属性或访问器 Decorators .

这样您就可以像下面这样标记您的属性:

export type RoomForClient = {
@SafeForClient
id: number;
...
}

注意:这将需要 Reflect-metadata 库。

关于javascript - 削减 JSON 对象以声明方式发送到 Typescript 中的客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375551/

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