Object.keys 返回私有属性

dem*_*emo 0 javascript modifiers knockout.js typescript ecmascript-6

我使用 Typescript 创建了类/viewModel。我将此类中的一个字段设置为私有字段,以便在尝试获取所有其他类属性时跳过它。

对吗?我怎样才能跳过我的私有财产?

Object.keys(myObject).forEach(property => {
        //some stuff
     }
});
Run Code Online (Sandbox Code Playgroud)

我的班级示例:

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('');
}
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 5

private关键字仅影响 TypeScript 中的可见性,不影响 JS 输出。

对于原型上未定义的类属性,因此无法使用类属性装饰器进行修改,最直接的方法是使用_私有属性的命名约定:

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

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