Comments (2)
It's not quite clear to me if the duplicate identifier error itself is a bug— assignments of initializers that aren't function expressions are allowed to merge with the existing sybol declaration during binding: https://www.typescriptlang.org/play/?noUnusedLocals=true&install-plugin=typescript-playground-link-shortener#code/CYUwxgNghgTiAEAzArgOzAFwJYHtVJxwAoBKALngDcctgBuAWAChRJYFUoBbEAZwAcoYBIkLwA3s3jSqseKmRcKUVAE9GTGbJhJUASVCpsiLCBjK1GrZTmJUAUQAe-OL165UF9cwC+zUTgAdApc8AC88ACMGijo2Hi6BiBGWCZmpBJ+TAGBdkkpaToReYbGpjAxhLkOzq7uCREZYQB8mRpAA
from typescript.
After some discussion within the team, we decided that this is in fact a bug.
In JS, this code makes m
a static method of f
:
function f() { }
f.m = () => 1
Which is a little questionable since m
isn't strictly speaking on the prototype the way most methods usually are. So it's not clear that it's worthwhile to mark it as such.
But it's definitely a bad idea in TS where you can have namespaces, because it results in a duplicate 'declaration':
function f() { }
declare namespace f {
export function m(): number
}
f.m = () => 1
both export function m
and f.m =
end up counting as declarations.
The narrow fix is to avoid binding f.m = () => 1
as a method in TS.
The wider fix is, I think, to stop binding f.m = () => 1
as a method even in JS. f.prototype.m = () => 1
should continue to be bound as a method but I think it's fine to represent f.m
as binding a property (whose type happens to be a function).
Both fixes boil down to deleting or conditionalising code in bindPotentiallyNewExpandoMemberToNamespace. The wider fix should make sure to continue binding prototype assignments as methods, so an additional parameter is probably needed if that's the way we want to go.
from typescript.
Related Issues (20)
- Way to change type of "this" on return type. HOT 2
- Suggestion: use numeric literals for `BYTES_PER_ELEMENT`
- Implement Interface Quick Fix generates duplicate declarations
- Inconsistent type validation: Different result depending on inline defined and executed function and declared and executed function HOT 17
- Variance annotations are not allowed in type aliases for intersections HOT 5
- No error or warning when assigning a constant to a constant but crash when run HOT 4
- Add support for Iterator Helpers (now stage 3) HOT 7
- Inconsistency between element access and object destruction HOT 1
- the union type bug? HOT 2
- Broken type inference for union of function and object HOT 2
- Symbol = LiveSymbol | DeadSymbol HOT 5
- compilerOptions.plugins accepts missing plugins without any logging or error information HOT 1
- Type inference considers only type amendments (if any are present), ignoring original typings HOT 4
- `satisfies` for return types HOT 5
- Type name in @throws not rendered as a link HOT 2
- Add organize imports presets
- Inconsistency between destructuring and object access in filter-narrowing. HOT 2
- autoimports crashes with aliased export
- Anonymous Function Type Not Constraining Object Return Value HOT 4
- Printer introduces syntax error into .tsx files
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typescript.