You followed a tutorial. It had a short file, one command, and a quiet terminal. Then you typed the same command and got this:
hello.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type.
You assume you typed something wrong. You didn't. The tutorial and your screen are running different versions of the same tool, and one default moved between them. I'm going to show you the same file passing and failing, so you can tell which situation you're in.
The file that works in the tutorial
Save this as hello.ts:
function greet(name) {
return "Hello, " + name;
}
console.log(greet("Sam"));
Now run 'tsc hello.ts'. 'tsc' is the TypeScript compiler, the program that checks your .ts file and turns it into a .js file Node can run.
I installed three versions side by side and ran that exact file through each one. Here is what I got:
tsc 5.9.3 -> no output, exit code 0 tsc 6.0.3 -> hello.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type. (exit 2) tsc 7.0.2 -> hello.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type. (exit 2)
Same file, same folder, same command. Those 'exit code' numbers are worth a word: an exit code is the number a command hands back when it finishes, where 0 means it went fine and anything else means it failed. At the time of writing (late October 2026), 7.0.2 is what 'npm view typescript dist-tags' reports as 'latest' ('dist-tags' are npm's named pointers to versions, like 'latest'). So if you ran 'npm install -g typescript' this month, you almost certainly got a version that complains.
Your tutorial may have been recorded on something like the 5.9.3 line. It wasn't lying. Its screen was true when it was filmed.
The fix, up front
Tell TypeScript what 'name' is, and the red goes away:
function greet(name: string) { return "Hello, " + name; } console.log(greet("Sam"));
The ': string' after the parameter is a type annotation. It says "this will be text". I ran this version on 6.0.3 and 7.0.2: no output, exit 0, and when I ran the generated hello.js with Node it printed 'Hello, Sam'. One quirk worth knowing: even on the failing runs, 'tsc' still wrote a hello.js next to your .ts — the error didn't stop the output, so you can see red and still have a working file. Fix the annotation anyway; the red is telling you where a future bug would hide.
What actually moved
It wasn't a project template. 'tsc --init', the command that writes a starter config file, already wrote '"strict": true' back in 5.9.3 — I checked, in both 5.9.3 and 6.0.3 — so a scaffolded project would have shown red on the old version too. What changed is the bare case, no config file at all: in my runs 5.9.3 treated 'strict' as off unless you asked for it, and 6.0.3 and 7.0.2 treat it as on. That's the moved default, and it's the one you hit if you just typed 'tsc hello.ts' in a folder with no tsconfig. So before you read any error, say which red you're looking at: a project that already had a config, or a bare file. They have different causes.
What the words mean
You've now met several terms that tutorials rarely stop to explain, so here they are in plain words.
- TS7006 is the error's ID number. You can search it.
- Implicit any means TypeScript can't work out what type 'name' is, so it quietly treats it as 'any', which means "anything at all". The checker can't help you with something that could be anything.
- strict is a switch that turns on a bundle of the pickier checks, including the one that forbids implicit any.
- tsconfig.json is a settings file in your project folder. It tells 'tsc' which options to use.
The error is not saying your code is broken. It's saying: "you didn't tell me what 'name' is, and I'm no longer willing to guess silently."
Proving the version is the cause
You can check that the default is the culprit, without changing your file. Tell the compiler to turn strict off:
tsc --strict false hello.ts
On 6.0.3 and on 7.0.2 this printed nothing and exited 0. The error vanished, which tells you the cause was the default and not a typo.
Be careful with what that proves. It's a diagnostic, a way of asking "is the version the reason?". It isn't the fix. You'd be switching off the thing that is trying to help you.
The second trap: the config file that won't load
Only read this next part if you already have a tsconfig.json. If you just typed 'tsc hello.ts' in a bare folder, the fix above is everything you need and you can stop here. But suppose you already ran 'tsc --init', or a tutorial told you to create a tsconfig.json. You'd think that would make things easier. It can make it stranger.
I put a tsconfig.json containing only '{ "compilerOptions": { "strict": false } }' in the folder, next to the same hello.ts, and ran 'tsc hello.ts' again:
tsc 5.9.3 -> no output, exit 0 tsc 6.0.3 -> error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error. (exit 1) tsc 7.0.2 -> same TS5112 error (exit 1)
When you name a file on the command line, 'tsc' ignores your tsconfig.json. 5.9.3 did that silently. 6.0.3 and 7.0.2 refuse to continue and tell you.
So the old question, "is there a tsconfig?", no longer settles anything. If you add '--ignoreConfig', the config is skipped on purpose and you land back on the version default. On both newer versions that gave me the same TS7006 as before.
The other way to run it is bare 'tsc' with no file name, which does read the tsconfig. In my test folder, with the strict-false config, bare 'tsc' on 6.0.3 and 7.0.2 exited 0 and wrote hello.js. The config's setting won.
The check I'd use now
Two steps, in this order.
- Run 'tsc -v'. It prints something like 'Version 6.0.3'. If the number starts with 6 or 7, an unset 'strict' means on. If you're on 5, it means off.
- Notice how you ran it. If you wrote 'tsc hello.ts', any tsconfig is ignored, so what you see is the version default plus whatever flags you typed. If you ran bare 'tsc', the tsconfig is in charge.
No tsconfig no longer means "non-strict". That sentence was true in the tutorial and isn't true now.
Why this matters
A beginner who sees red and no explanation usually does one of two things. They paste the error into an AI assistant and accept whatever it does, or they give up on TypeScript. Both are worse than ten seconds with 'tsc -v'.
Knowing a default moved is a skill that outlasts this one error. Next time a tutorial shows silence and your screen shows red, the first question is not "what did I break?" It's "what version is the tutorial using, and what's mine?"
Do this now
Make a scratch folder, save the hello.ts from the top, and run these three lines. (If 'tsc -v' says "command not found", the install didn't finish — run 'npm install -g typescript' again.)
tsc -v tsc hello.ts tsc --strict false hello.ts
If the middle one is red and the last one is quiet, you've just proved the version default is the cause. Then add ': string' to the parameter, run 'tsc hello.ts' once more, and watch it go silent for the right reason.