2017-09-23 70 views
0

所以我有我认为是一个共同的困境。我有一个数据库对象,一个来自文档数据库的常规JS对象,然后我想将该对象发送给我的客户端。但是一些领域很敏感,不能向客户透露。声明式地将一个JSON对象放在Typescript中发送给客户端?

在C#世界,我只想用声明反光编程属性附加到我的C#对象,指明哪些场是客户消费,像这样的安全:

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

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

然后我会使用反射收集所有[SafeForClient]属性,构建我的JSON并将其发送到电线上。

尽管在JavaScript世界中没有这样的运气。在这个级别上没有声明式元编程。

我在打字稿像这样定义我的类型:

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

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

所有,它使给客户端的房间的数据只是总房价数据的一个子集。目前,我有一个属性不应该被包含,这并不是那么糟糕......我可以很容易地从对象中删除这个属性。但在未来,当增加更多...我将被要求在两个地方添加这些属性名称;一次在Room的定义中,并且一次在方法中实际减少。

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

任何想法?

回答

2

你可能会考虑使用财产或访问者Decorators

这样,你同样可以标记您的属性如下:

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

注:这将需要反映,元数据库。

相关问题