diff --git a/package.json b/package.json index 216e5a5a4f..5ed28dc39b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ }, "devDependencies": { "@lubien/fixture-beta-package": "^1.0.0-beta.1", + "@typescript-eslint/parser": "^2.9.0", "ava": "^2.4.0", "babel-eslint": "^10.0.3", "chalk": "^2.4.2", @@ -66,6 +67,7 @@ "outdent": "^0.7.0", "pify": "^4.0.1", "tempy": "^0.3.0", + "typescript": "^3.7.2", "xo": "^0.25.3" }, "peerDependencies": { diff --git a/rules/custom-error-definition.js b/rules/custom-error-definition.js index e2b4ce56cf..ba71c8098f 100644 --- a/rules/custom-error-definition.js +++ b/rules/custom-error-definition.js @@ -80,6 +80,12 @@ const customErrorDefinition = (context, node) => { } const constructorBodyNode = constructor.value.body; + + // Verify the constructor has a body (TypeScript) + if (!constructorBodyNode) { + return; + } + const constructorBody = constructorBodyNode.body; const superExpression = constructorBody.find(isSuperExpression); diff --git a/test/custom-error-definition.js b/test/custom-error-definition.js index 816cf5dc5e..7b5325cda7 100644 --- a/test/custom-error-definition.js +++ b/test/custom-error-definition.js @@ -12,6 +12,10 @@ const ruleTester = avaRuleTester(test, { } }); +const typescriptRuleTester = avaRuleTester(test, { + parser: require.resolve('@typescript-eslint/parser') +}); + const invalidClassNameError = {ruleId: 'custom-error-definition', message: 'Invalid class name, use `FooError`.'}; const constructorError = {ruleId: 'custom-error-definition', message: 'Add a constructor to your error.'}; const noSuperCallError = {ruleId: 'custom-error-definition', message: 'Missing call to `super()` in constructor.'}; @@ -433,3 +437,14 @@ ruleTester.run('custom-error-definition', rule, { } ] }); + +typescriptRuleTester.run('custom-error-definition', rule, { + valid: [ + outdent` + class CustomError extends Error { + constructor(type: string, text: string, reply?: any); + } + ` + ], + invalid: [] +});