-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enums can not be used for index signature types #13042
Comments
can we allow |
Approved. Note that this will not cause nominal enforcement of enum index expressions!Specifically, |
Thanks for handling this! Waiting for the fix 👍🏻 |
@augusto-moura Looks like it's been moved from milestone TypeScript 2.6 to TypeScript 2.7 as seen above 😞 |
@sandersn do you know when could we have this released? |
@yordis Not sure, but looks like it got bumped back to 2.8, so probably at least another 3 months. |
😭 <---- I need it in the Reactions |
I'm not sure why and how but it started working for me (2.7.1). So a long awaited (by me ;) feature of enum exhaustive checking finally works. Given
the following is ok
but this is compile time error
|
@kompot That's because you're mapping the enums to string values. You're really just using strings as keys. This issue is for the use of numeric enum entries (which would allow auto-assigned enums to work as well) As far as I know, it's worked via string since |
Well, it definitely didn't work like 6 months ago when I was banging my head trying to get some concise way of exhaustive enum checking. I understand that this is a different issue, yes. But from my understanding getting it work with auto-assigned enums is not that critical when mapped strings enums work this nice. |
Doing it like so may help some in the interim |
Should be fixed by #23592 |
Was this actually fixed by #23592 ? enum Test {
A = "a",
B = "b"
}
export interface PhaseApi1 {
[x in Test]: () => void;
} still have issues * A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.
* A computed property name must be of type 'string', 'number', 'symbol', or 'any'.
* Cannot find name 'x'. |
enum Test {
A = "a",
B = "b"
}
type PhaseApi1 = {
[x in Test]: () => void;
}; |
Just a postmortem FYI for anyone who's gone through what I did, trying for hours to solve this with all manner of type rejigging to remove index signature errors... Make sure your IDE linter has the latest version of Typescript. Those errors might not actually be errors at all. +1 for the 😭 reaction option. |
@mhegazy Any reason that this works for |
It's unlikely that this happens to anyone else but me, but if you're trying to figure out why the fix isn't working for you, check that you spelled your enum correctly. |
Is there a way to make either key optional? |
type PhaseApi1 = {
[x in Test]?: () => void;
}; |
TypeScript Version: 2.1.4
Expected behavior:
No errors will be thrown.
Actual behavior:
index in UserInterfaceElement
throws the errorType 'UserInterfaceElement' is not assignable to type 'string'
This is a regression caused by #12425. The change makes sense, but there are very valid use cases for supporting enums in index signatures.
For another use case, in a project I'm working on, we use an enum to list all types of items. We have a function that takes an object with the enum values as keys, and data as values.
A workaround is to use
index: number
, but then it's not enforced that you have to use a valid ItemType as a key.Original Issue: #2491
The text was updated successfully, but these errors were encountered: