我可以关闭 eslint tyfedef 规则以在 lambda 中进行解构吗
Can I turn off eslint tyfedef rule for destructuring in lambdas
我想知道是否可以仅针对 lambda 中的数组或对象解构关闭 typedef 规则?
getPersonsNames(): string[] {
type Person = { name: string; age: number };
const persons: Person[] = [
{ name: `Jan Kowalski`, age: 12 },
{ name: `Justyna Kowalczyk`, age: 22 }
];
return persons.map(({ name }) => name); // ESLint: Expected a type annotation.(@typescript-eslint/typedef)
}
一般来说,我想使用 typedfees 进行解构,但在那种情况下我不想这样做。有没有办法排除这些情况?
我试图将 'arrow-parameter': false,
(和 arrowParameter: false
如上所示)添加到 @typescript-eslint/typedef
但它根本没有帮助。
Documentation of this rule which I used: @typescript-eslint/typedef
要复制的文件
.eslintrc.js
配置文件:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: './tsconfig.json',
createDefaultProgram: true,
ecmaVersion: 2020,
sourceType: 'module',
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
],
rules: {
'@typescript-eslint/typedef': [
'error',
{
'arrowParameter': false,
'propertyDeclaration': true,
'parameter': true,
'memberVariableDeclaration': true,
'callSignature': true,
'variableDeclaration': true,
'arrayDestructuring': true,
'objectDestructuring': true
}
],
},
}
.gitignore
:
node_modules
index.ts
:
function getPersonsNames(): string[] {
type Person = { name: string; age: number };
const persons: Person[] = [
{ name: `Jan Kowalski`, age: 12 },
{ name: `Justyna Kowalczyk`, age: 22 }
];
return persons.map(({ name }) => name); // ESLint: Expected a type annotation.(@typescript-eslint/typedef)
}
getPersonsNames();
package.json
:
{
"name": "typedef-in-destructuring-lambdas",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint": "eslint . --ext .ts"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.3.0",
"@typescript-eslint/parser": "^4.3.0",
"eslint": "^7.10.0",
"typescript": "^4.0.3"
}
}
tsconfig.json
:
{
"compilerOptions": {
"target": "ES2017",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"noEmit": true,
"noEmitHelpers": true,
"importHelpers": true,
"strictNullChecks": false,
"skipLibCheck": true,
"lib": [
"dom",
"es6",
"es2019"
]
}
}
该规则不支持这一点 - 它将所有解构视为相同。
请注意,更多的可定制性不会添加到规则中,因为它不应该在大多数代码库中使用。
使用它并添加不必要的类型注释是 anti-pattern,会对您的代码库产生负面影响。
此规则并不是真正打算在代码库中使用 day-to-day,它旨在帮助您迁移代码库,以便您可以打开 noImplicitAny
编译器选项。
到处都是不必要的类型注释对您的代码库不利。每一个都会产生维护成本(你必须手动更新它们以保持它们同步),并且每一个也会 减慢编译速度 ,因为 TypeScript 必须花时间来验证注释是正确。
作为@typescript-eslint
的维护者,我强烈建议反对使用typedef
规则。
我想知道是否可以仅针对 lambda 中的数组或对象解构关闭 typedef 规则?
getPersonsNames(): string[] {
type Person = { name: string; age: number };
const persons: Person[] = [
{ name: `Jan Kowalski`, age: 12 },
{ name: `Justyna Kowalczyk`, age: 22 }
];
return persons.map(({ name }) => name); // ESLint: Expected a type annotation.(@typescript-eslint/typedef)
}
一般来说,我想使用 typedfees 进行解构,但在那种情况下我不想这样做。有没有办法排除这些情况?
我试图将 'arrow-parameter': false,
(和 arrowParameter: false
如上所示)添加到 @typescript-eslint/typedef
但它根本没有帮助。
Documentation of this rule which I used: @typescript-eslint/typedef
要复制的文件
.eslintrc.js
配置文件:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: './tsconfig.json',
createDefaultProgram: true,
ecmaVersion: 2020,
sourceType: 'module',
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
],
rules: {
'@typescript-eslint/typedef': [
'error',
{
'arrowParameter': false,
'propertyDeclaration': true,
'parameter': true,
'memberVariableDeclaration': true,
'callSignature': true,
'variableDeclaration': true,
'arrayDestructuring': true,
'objectDestructuring': true
}
],
},
}
.gitignore
:
node_modules
index.ts
:
function getPersonsNames(): string[] {
type Person = { name: string; age: number };
const persons: Person[] = [
{ name: `Jan Kowalski`, age: 12 },
{ name: `Justyna Kowalczyk`, age: 22 }
];
return persons.map(({ name }) => name); // ESLint: Expected a type annotation.(@typescript-eslint/typedef)
}
getPersonsNames();
package.json
:
{
"name": "typedef-in-destructuring-lambdas",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint": "eslint . --ext .ts"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.3.0",
"@typescript-eslint/parser": "^4.3.0",
"eslint": "^7.10.0",
"typescript": "^4.0.3"
}
}
tsconfig.json
:
{
"compilerOptions": {
"target": "ES2017",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"noEmit": true,
"noEmitHelpers": true,
"importHelpers": true,
"strictNullChecks": false,
"skipLibCheck": true,
"lib": [
"dom",
"es6",
"es2019"
]
}
}
该规则不支持这一点 - 它将所有解构视为相同。
请注意,更多的可定制性不会添加到规则中,因为它不应该在大多数代码库中使用。
使用它并添加不必要的类型注释是 anti-pattern,会对您的代码库产生负面影响。
此规则并不是真正打算在代码库中使用 day-to-day,它旨在帮助您迁移代码库,以便您可以打开 noImplicitAny
编译器选项。
到处都是不必要的类型注释对您的代码库不利。每一个都会产生维护成本(你必须手动更新它们以保持它们同步),并且每一个也会 减慢编译速度 ,因为 TypeScript 必须花时间来验证注释是正确。
作为@typescript-eslint
的维护者,我强烈建议反对使用typedef
规则。