Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ab8572e

Browse files
authored
fix(eslint-plugin): no-explicit-any constructor functions (& mo… (typescript-eslint#1711)
1 parent 485e902 commit ab8572e

File tree

3 files changed

+242
-78
lines changed

3 files changed

+242
-78
lines changed

packages/eslint-plugin/docs/rules/no-explicit-any.md

Lines changed: 31 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -119,30 +119,23 @@ function foo2(...args: readonly any[]): void {}
119119
function foo3(...args: Array<any>): void {}
120120
function foo4(...args: ReadonlyArray<any>): void {}
121121

122-
const bar1 = (...args: any[]): void {}
123-
const bar2 = (...args: readonly any[]): void {}
124-
const bar3 = (...args: Array<any>): void {}
125-
const bar4 = (...args: ReadonlyArray<any>): void {}
122+
declare function bar(...args: any[]): void;
126123

127-
const baz1 = function (...args: any[]) {}
128-
const baz2 = function (...args: readonly any[]) {}
129-
const baz3 = function (...args: Array<any>) {}
130-
const baz4 = function (...args: ReadonlyArray<any>) {}
124+
const baz = (...args: any[]) => {};
125+
const qux = function(...args: any[]) {};
131126

132-
interface Qux1 { (...args: any[]): void; }
133-
interface Qux2 { (...args: readonly any[]): void; }
134-
interface Qux3 { (...args: Array<any>): void; }
135-
interface Qux4 { (...args: ReadonlyArray<any>): void; }
127+
type Quux = (...args: any[]) => void;
128+
type Quuz = new (...args: any[]) => void;
136129

137-
function quux1(fn: (...args: any[]) => void): void {}
138-
function quux2(fn: (...args: readonly any[]) => void): void {}
139-
function quux3(fn: (...args: Array<any>) => void): void {}
140-
function quux4(fn: (...args: ReadonlyArray<any>) => void): void {}
141-
142-
function quuz1(): ((...args: any[]) => void) {}
143-
function quuz2(): ((...args: readonly any[]) => void) {}
144-
function quuz3(): ((...args: Array<any>) => void) {}
145-
function quuz4(): ((...args: ReadonlyArray<any>) => void) {}
130+
interface Grault {
131+
(...args: any[]): void;
132+
}
133+
interface Corge {
134+
new (...args: any[]): void;
135+
}
136+
interface Garply {
137+
f(...args: any[]): void;
138+
}
146139
```
147140

148141
Examples of **correct** code for the `{ "ignoreRestArgs": true }` option:
@@ -155,30 +148,23 @@ function foo2(...args: readonly any[]): void {}
155148
function foo3(...args: Array<any>): void {}
156149
function foo4(...args: ReadonlyArray<any>): void {}
157150

158-
const bar1 = (...args: any[]): void {}
159-
const bar2 = (...args: readonly any[]): void {}
160-
const bar3 = (...args: Array<any>): void {}
161-
const bar4 = (...args: ReadonlyArray<any>): void {}
162-
163-
const baz1 = function (...args: any[]) {}
164-
const baz2 = function (...args: readonly any[]) {}
165-
const baz3 = function (...args: Array<any>) {}
166-
const baz4 = function (...args: ReadonlyArray<any>) {}
167-
168-
interface Qux1 { (...args: any[]): void; }
169-
interface Qux2 { (...args: readonly any[]): void; }
170-
interface Qux3 { (...args: Array<any>): void; }
171-
interface Qux4 { (...args: ReadonlyArray<any>): void; }
172-
173-
function quux1(fn: (...args: any[]) => void): void {}
174-
function quux2(fn: (...args: readonly any[]) => void): void {}
175-
function quux3(fn: (...args: Array<any>) => void): void {}
176-
function quux4(fn: (...args: ReadonlyArray<any>) => void): void {}
177-
178-
function quuz1(): ((...args: any[]) => void) {}
179-
function quuz2(): ((...args: readonly any[]) => void) {}
180-
function quuz3(): ((...args: Array<any>) => void) {}
181-
function quuz4(): ((...args: ReadonlyArray<any>) => void) {}
151+
declare function bar(...args: any[]): void;
152+
153+
const baz = (...args: any[]) => {};
154+
const qux = function(...args: any[]) {};
155+
156+
type Quux = (...args: any[]) => void;
157+
type Quuz = new (...args: any[]) => void;
158+
159+
interface Grault {
160+
(...args: any[]): void;
161+
}
162+
interface Corge {
163+
new (...args: any[]): void;
164+
}
165+
interface Garply {
166+
f(...args: any[]): void;
167+
}
182168
```
183169

184170
## When Not To Use It

packages/eslint-plugin/src/rules/no-explicit-any.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,23 @@ export default util.createRule<Options, MessageIds>({
5353
],
5454
create(context, [{ ignoreRestArgs, fixToUnknown }]) {
5555
/**
56-
* Checks if the node is an arrow function, function declaration or function expression
56+
* Checks if the node is an arrow function, function/constructor declaration or function expression
5757
* @param node the node to be validated.
58-
* @returns true if the node is an arrow function, function declaration, function expression, function type, or call signature
58+
* @returns true if the node is any kind of function declaration or expression
5959
* @private
6060
*/
6161
function isNodeValidFunction(node: TSESTree.Node): boolean {
6262
return [
63-
AST_NODE_TYPES.ArrowFunctionExpression,
64-
AST_NODE_TYPES.FunctionDeclaration,
65-
AST_NODE_TYPES.FunctionExpression,
66-
AST_NODE_TYPES.TSFunctionType,
67-
AST_NODE_TYPES.TSCallSignatureDeclaration,
63+
AST_NODE_TYPES.ArrowFunctionExpression, // const x = (...args: any[]) => {};
64+
AST_NODE_TYPES.FunctionDeclaration, // function f(...args: any[]) {}
65+
AST_NODE_TYPES.FunctionExpression, // const x = function(...args: any[]) {};
66+
AST_NODE_TYPES.TSEmptyBodyFunctionExpression, // declare class A { f(...args: any[]): unknown; }
67+
AST_NODE_TYPES.TSFunctionType, // type T = (...args: any[]) => unknown;
68+
AST_NODE_TYPES.TSConstructorType, // type T = new (...args: any[]) => unknown
69+
AST_NODE_TYPES.TSCallSignatureDeclaration, // type T = {(...args: any[]): unknown};
70+
AST_NODE_TYPES.TSConstructSignatureDeclaration, // type T = {new (...args: any[]): unknown};
71+
AST_NODE_TYPES.TSMethodSignature, // type T = {f(...args: any[]): unknown};
72+
AST_NODE_TYPES.TSDeclareFunction, // declare function _8(...args: any[]): unknown;
6873
].includes(node.type);
6974
}
7075

0 commit comments

Comments
 (0)