简体   繁体   English

使用 Airbnb-Typescript-ESLint-Config 命名私有字段和冲突的成员排序

[英]Naming private fields and conflicted member ordering with the Airbnb-Typescript-ESLint-Config

I have added eslint with Prettier and the Airbnb-TypeScript-Styleguide to my Angular-project and it says you shouldn't have any dangling underscores.我在我的 Angular 项目中添加了 Prettier 和 Airbnb-TypeScript-Styleguide 的 eslint,它说你不应该有任何悬空的下划线。 How am I meant to name my private fields that are accessed through getters and setters?我该如何命名通过 getter 和 setter 访问的私有字段?

Example:例子:

private _isEnabled: boolean = false;
public get isEnabled() {
    return this._isEnabled;
}
public set isEnabled(v:boolean) {
    this._isEnabled = v;
}

If I rename _isEnabled to isEnabled it is no longer distinguishable from the getter and setter name.如果我将_isEnabled重命名为isEnabled ,它将不再与 getter 和 setter 名称区分开来。 If I use a slightly different name like enabled it is no longer 100% clear that enabled should be accessed through its getters and setters.如果我使用稍微不同的名称,例如启用,则不再 100% 清楚启用应该通过它的 getter 和 setter 访问。

I'm also running into an issue if I have multiple properties with getters and setters.如果我有多个带有 getter 和 setter 的属性,我也会遇到问题。 If I order them like this:如果我这样订购它们:

get isEnabled() {...}
set isEnabled(v) {...}
get isHidden() {...}
set isHidden(v) {...}

I get an error saying 'get IsHidden()' should be with the other get properties.我收到一条错误消息,提示“get IsHidden()”应该与其他 get 属性一起使用。 However, if I order them like this:但是,如果我这样订购它们:

get isEnabled() {...}
get isHidden() {...}
set isEnabled(v) {...}
set isHidden(v) {...}

I get an error saying that overloads should be adjacent (get isEnabled() should be next to set isEnabled(v))我收到一条错误消息,指出重载应该是相邻的(get isEnabled() 应该在 set isEnabled(v) 旁边)

My eslintrc.json looks like this:我的 eslintrc.json 看起来像这样:

{
    "root": true,
    "ignorePatterns": [
        "app/**/*", // ignore nodeJs files
        "dist/**/*",
        "release/**/*"
    ],
    "overrides": [
        {
            "files": ["*.ts"],
            "parserOptions": {
                "project": [
                    "./tsconfig.serve.json",
                    "./src/tsconfig.app.json",
                    "./src/tsconfig.spec.json",
                    "./e2e/tsconfig.e2e.json"
                ],
                "createDefaultProgram": true
            },
            "extends": [
                // Angular's recommended settings
                "plugin:@angular-eslint/recommended",
                // AirBnB Styleguide rules
                "airbnb-typescript/base",
                // Settings for Prettier
                "plugin:prettier/recommended"
            ],
            "rules": {
                "prefer-arrow/prefer-arrow-functions": 0,
                "@angular-eslint/directive-selector": 0,
                "@angular-eslint/component-selector": [
                    "error",
                    {
                        "type": "element",
                        "prefix": "app",
                        "style": "kebab-case"
                    }
                ]
            }
        },
        // Rules for the HTML of Angular components
        {
            "files": ["*.component.html"],
            "extends": ["plugin:@angular-eslint/template/recommended"],
            "rules": {}
        },
        // Rules for the TypeScript of Angular components
        {
            "files": ["*.component.ts"],
            "extends": [
                "plugin:@angular-eslint/ng-cli-compat",
                "plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
                "plugin:@angular-eslint/template/process-inline-templates"
            ]
        }
    ]
}

Is my configuration wrong?我的配置错了吗?

I'm using the linter mostly for consistency throughout my code.我使用 linter 主要是为了在我的代码中保持一致性。 Is it possible to set and enforce a rule on how private fields are to be named and how the getters and setters are to be ordered when there are multiple properties with a getter and setter?是否可以设置和强制执行有关如何命名私有字段以及当有多个具有 getter 和 setter 的属性时如何对 getter 和 setter 进行排序的规则?

First, I do not recommend to use setter and getter if there is no use of it.首先,如果没有使用,我不建议使用setter和getter。 Over-designing is not good practice.过度设计不是好的做法。

You can always rename the private attribute with Field prefix like this:您始终可以使用Field前缀重命名私有属性,如下所示:

private isEnabledField: boolean = false;
public get isEnabled() {
    return this.isEnabledField;
}
public set isEnabled(newValue:boolean) {
    this.isEnabledField = newValue;
}

As for your linting error, it's difficult to say without the specific error.至于你的 linting 错误,没有具体的错误很难说。 My guess is that the attribute should be before the setter and getter like this:我的猜测是该属性应该在 setter 和 getter 之前,如下所示:

private isEnabledField
get isEnabled() {...}
set isEnabled(newValue) {...}

private isHiddenField
get isHidden() {...}
set isHidden(newValue) {...}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM