tslint says calls to console.log are not allowed - How do I allow this?
Asked Answered
C

12

146

I just started using create-react-app with typescript

create-react-app my-app --scripts-version=react-scripts-ts

and the default tslint.json configuration does not allow console.log().

How can I (for now) enable console.log?

The docs for this are at https://palantir.github.io/tslint/rules/no-console/. But they don't say where to put this line:

    "no-console": [true, "log", "error"]

I searched and found this tslint.json configuration file syntax, so I tried this:

"rules": {
    "no-console": [true, "warning"]
}

In an attempt to get log messages that would just be warnings. But that didn't work.

I've commented out the few console.log() lines I have but will want to be able to do this in the future.

Cornellcornelle answered 23/4, 2018 at 21:54 Comment(0)
C
280

Add // tslint:disable-next-line:no-console in the line right before your calls to console.log to prevent the error message only once.

If you want to disable the rule entirely add the following to your tslint.json (most likely in your root folder):

{
    "rules": {
        "no-console": false
    }
}
Codger answered 23/4, 2018 at 22:2 Comment(7)
I'm not sure what happened but now "no-console": false is not working for me. I've found a work around is to put // tslint:disable:no-console at the top of the file.Cornellcornelle
"no-console": false works for me, but I have to restart "npm start" for it to take effect.Ruvolo
"no-console": false doesn't work for me, even with npm run start.Vansickle
@EricFulmer put that in the "jsRules" node. "jsRules": { "no-console": false },Lope
I added the rule to jsRules and did a fresh yarn start before the errors went away. Not sure which one of those did it.Browse
or in the same line as the following: console.log('hello world'); // tslint:disable-line:no-consoleSpheroid
SYNTAX CHANGED. For the next-line exception there needs to be a space before no-console: // eslint-disable-next-line no-console. For the file exception, it also has to be inside of the Multi-line comment syntax: /* eslint-disable no-console */Kb
G
38

For those of you coming here with a mixed codebase of javascript and typescript.

You may need to define the 'no-console' option in jsRules, jslints rules object for javascript files, i.e. there are separate rules objects for javascript and typescript.

//tslint.json

{
  "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], //Example... 
  "rules": {
    "no-console": false //Disable for typescript
  },
  "jsRules": {
    "no-console": false //Disable for javascript
  }
}
Gale answered 3/9, 2018 at 12:12 Comment(6)
but -- what is the purpose of this thing?Midvictorian
Of jsRules, or no-console?Gale
no-console -- it seems (I looked it up) that it is there only to warn you that console messages don't belong in production code. That kinda makes it a questionable rule any time your env is not prodMidvictorian
I see your point, to a degree. One thing to consider is that console is not part of the javascript language, it's usually implemented in javascript engines, that's the point though - it's not part of the javascript language, you're baking a dependency into your code that may or may not exist. With that said, I can see a use for this rule.Gale
@robertotomás, This rule is based on the best practice of not having console.log messages in your code. Production code should not have this, so this lets you know your not prod ready. You might have two tslint configurations one that allows it and another that does not. I have a logger.info function that calls console.log (so a wrapper) which allows me to easily enable or disable logging for the entire app. I'm not saying this is best practice, just something that I've done. It also makes it easier to integrate with another logger like github.com/krakenjs/beaver-logger.Cornellcornelle
@robertotomás Years back when people still used IE a console.log() in your code would cause javascript to stop executing (crash) on that line. This is because IE treats console.log() as an error unless the developer tools are open. Of course, I don't know anyone who still use IE so these days it's just a matter of style/taste/opinion IMHOSubstituent
W
10

Add the following to your tslint.json

{
   "rules": {
      "no-console": {
         "severity": "warning",
      } 
   }
}
Wyman answered 20/1, 2019 at 9:18 Comment(0)
A
8

This is the correct syntax to define the no-console rule (or any other rule for that matter) but only with a warning rather than an error (obviously change the options to whatever you want)

"no-console": {
    "severity": "warning",
    "options": [
        "log",
        "error",
        "debug",
        "info",
        "time",
        "timeEnd",
        "trace"
    ]
},
Album answered 17/3, 2019 at 14:58 Comment(1)
This works perfectly as warning. BTW, this is not documented in tslint documentation.Eminent
V
8

The way I handle tslint "no-console" rule is per file which I have found is convenient and isolated in the development phase.

As soon as I need to use the first console.log(); Visual Studio Code shows the option to add:

// tslint:disable-next-line: no-console

console.log();

So here I just delete "-next-line" and this command will cover the entire file.

// tslint:disable: no-console

console.log();

I hope it helps as an alternative to disable the feature for the entire app.

RON

Vizor answered 22/5, 2020 at 6:15 Comment(0)
C
4

if // tslint:disable-next-line:no-console doesn't work try with // eslint:disable-next-line:no-console

Concoct answered 1/2, 2020 at 16:31 Comment(1)
tslint:disable-next-line:no-console work well for meBernardinebernardo
D
3

Just a dirty hack to bypass linter:

const { log } = console; log('Hello linter'); // TODO: remove
Decoder answered 10/6, 2022 at 2:59 Comment(0)
P
2

in typeScript version 3 update tslint.json under key rule like below:

"no-console": [
    true,
    "debug",
    "time",
    "timeEnd",
    "trace"
],

this way you just specify debug, time, timeEnd, trace to be not used, if in your default tslint "info" is in the list just remove it.

Psychometrics answered 15/1, 2020 at 15:32 Comment(1)
This is the way it should be done as stated in the docs palantir.github.io/tslint/rules/no-consoleLacework
B
1

For those coming here looking for a way to keep console.log as disallowed, but to allow helpful methods like console.time and console.timeEnd, for example, you can explicitly define it globally in your .eslintrc rules:

 "no-console": ["error", {"allow": ["time", "timeEnd", "trace"]}],
Burnside answered 11/7, 2022 at 15:12 Comment(0)
S
0

According to the docs: https://eslint.org/docs/user-guide/getting-started#configuration

  • "off" or 0 - turn the rule off
  • "warn" or 1 - turn the rule on as a warning (doesn’t affect exit code)
  • "error" or 2 - turn the rule on as an error (exit code will be 1)

By the way, your correct setup would be

{
  "rules": {
    "no-console": false
  }
}
Saintmihiel answered 4/6, 2018 at 15:27 Comment(0)
N
0
  {
    "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"],
    "linterOptions": {
        "exclude": [
            "config/**/*.js",
            "node_modules/**/*.ts",
            "coverage/lcov-report/*.js"
        ]
    },
    "rules": {
        "no-console": false
    },
    "jsRules": {
        "no-console": false
    }
 }

enter image description here

Nevernever answered 10/2, 2020 at 14:51 Comment(0)
K
0

The Syntax changed!

For the next-line exception there needs to be a space before no-console: // eslint-disable-next-line no-console.

For the file exception, it also has to be inside of the Multi-line comment syntax: /* eslint-disable no-console */.

It also might depend on certain configurations.

Kb answered 3/5, 2022 at 14:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.