2017-09-23 75 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; 
    ... 
} 

注:這將需要反映,元數據庫。

相關問題