2016-11-04 59 views
0

我有用Typescript創建的class/viewModel。 我在這個類中創建了一個字段爲private,以便在嘗試獲取所有其他類屬性時跳過它。Object.keys返回私有屬性

這是正確的,我怎樣才能跳過我的私人財產?我班的

Object.keys(myObject).forEach(property => { 
     //some stuff 
    } 
}); 

例子:

class MyModel{ 
    id: any = ko.observable(''); 
    name: any = ko.observable(''); 

    address: any = ko.observable(''); 
    city: any = ko.observable(''); 
    state: any = ko.observable(''); 
    country: any = ko.observable(''); 

    private secretField= ko.observable(''); 
} 
+0

你試過使其「受保護」?它能解決你的問題嗎? –

+0

@SebastianKaczmarek,不,沒有幫助 – demo

回答

3

private關鍵字僅影響TypeScript中的可見性,並不影響JS輸出。

對於未在原型定義的,因此不能用類屬性的裝飾被修改的類屬性,最直接的方法是使用_命名約定私人性質:

class MyModel{ 
    ... 
    private _secretField= ko.observable(''); 
} 

... 

Object.keys(myObject) 
.filter(key => !(typeof key === 'string' && key.charAt(0) === '_')) 
.forEach(property => { 
     //some stuff 
    } 
}); 
3

打字稿編譯私人性質就像普通性質的私人性的強制執行只是做編譯的時候,他們還在那裏運行。

有很多在GitHub上的要求,使即使是在運行時無法訪問,但由於設計上的侷限和/或本尚未實現的哲學問題,私人性質的,它可能永遠不會。

您可以閱讀一些設計討論歷史here

這意味着,你必須使用你自己的慣例來處理這個問題,比如像下劃線前綴名稱和過濾,在你的循環。