Dangerous "name" (and potentially others) global
See original GitHub issueTypeScript Version: 2.6.0-dev.20170913
Code
if (name === "asdf") {
console.log("asdf")
}
https://www.typescriptlang.org/play/#src=if (name %3D%3D%3D "asdf") {%0D%0A console.log('hello')%0D%0A}
Expected behavior:
Error out
Actual behavior:
More than once, I had a “local” variable called name
, outside a block scope, and it didn’t warn me that it’s not defined (or used before declaration). even though, in my code, event.name
is a string, the global name
variable is of type never
. it’s defined in lib.dom.d.ts
, along with other “juicy” global names that will provide some confusion, like length
, external
, event
, closed
one ‘fix’ (that would be a breaking change) would to make lib.dom-globals.d.ts
(the propertiers that are usually accessible through window
variable) and make it an opt-in in tsconfig.json compilerOptions.lib
array
Issue Analytics
- State:
- Created 6 years ago
- Reactions:38
- Comments:74 (33 by maintainers)
Perhaps we could get a compiler flag for
noImplicitGlobalThis
? Thus usingname
would be an error but if you want to useglobalThis.name
you could?I think we are just trying to be too clever here. just remove the damn thing 😃