Comments (6)
Then I have the inverse problem to report, which is that every other type which is/derives from HTMLElement allows the use of symbol keys in the way I showed.
from typescript.
@nmain set noImplicitAny=false
and you will see the different behavior between HTMLFormElement
and HTMLSpanElement
. I believe it is caused by the signature [name: string]: any;
in the interface HTMLFormElement
but I don't know why.
from typescript.
This isn't really any different from writing
form.blah = 42;
which is disallowed for similar reasons. It's expected to use a type assertion or interface merge if you're doing this on purpose.
from typescript.
@miss-programgamer That doesn't seem to be the case: Playground. Can you show a reproduction of this?
declare var a: HTMLSpanElement;
declare var b: symbol;
declare var c: any;
a[b] = c; // Element implicitly has an 'any' type because expression of type 'symbol' can't be used to index type 'HTMLSpanElement'.(7053)
from typescript.
This issue has been marked as "Working as Intended" and has seen no recent activity. It has been automatically closed for house-keeping purposes.
from typescript.
This is definitely not working as intended. The entire point of symbols is that you can use them as keys on any object to attach things to them anonymously, I shouldn't have to define an interface merge just to account for the fact that the interface for one html element defines string keys to any. I use them to attach component instances to the root elements of those components, and I think that's a perfectly normal use case. Even on principle I don't see why typescript should disallow this by default. Symbol keys just aren't the same as string or number keys, and really shouldn't be treated the same as far as interfaces are concerned.
And even if you disagree with me, I've still pointed out that there's an inconsistency in the interfaces of html elements, so you should at least deliberate on how to make the behaviour consistent between element types, regardless of how you choose to resolve this. And no, arguing that this only happens when using implicit any isn't cause to dismiss this issue.
from typescript.
Related Issues (20)
- Default import from an ESM package into a CommonJS project with esModuleInterop is faulty HOT 3
- Watch cannot handle large amount of file changes HOT 1
- generator next type should be inferred as union (instead of intersection) of yields' types OR just unknown
- Elementwise elaboration fails to be found for properties mixed with incompatible index signatures using intersections
- Error when accessing properties on `globalThis` with the same name of a global variable HOT 2
- [NewErrors] 5.5.0-dev.20240428 vs 5.4.5 HOT 49
- Private class properties prevent `Readonly` type inference HOT 2
- [ServerErrors][TypeScript] 5.5.0-dev.20240428 HOT 12
- [ServerErrors][JavaScript] 5.5.0-dev.20240428 HOT 9
- Strange runtime caching bug involving `as const` and `const T` generic HOT 1
- When relatively importing a `.d.ts` file in a declaration file, TypeScript loads a `.ts` file instead HOT 7
- Calling decorators with @ loses type safety with function as argument HOT 2
- Include error maps in the typescript libraries for web apis to give developers easy access to potential thrown exceptions HOT 6
- jsdoc @type does not resolve a type HOT 1
- Removing `node_modules`, running `npm ci` leaves diagnostics behind in ts and tsconfig files
- Module resolution: typeRoots key conflict in cache HOT 2
- JSDoc @import not detecting use in @callback HOT 2
- Segmentation fault on Node.js 22 HOT 27
- Constraint in generic type forgotten in assignability check HOT 2
- tsc crash with "TypeError: Cannot read properties of undefined (reading 'flags')" HOT 5
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.