Microsoft/TypeScript
在 GitHub 查看Mapping with enum key type and literal value type gives not assignable error.
Open
#48,217 建立於 2022年3月11日
BugDomain: enumHelp Wanted
倉庫指標
- Star
- (48,455 star)
- PR 合併指標
- (平均合併 6天 17小時) (30 天內合併 9 個 PR)
描述
Bug Report
🔎 Search Terms
map enum key literal value
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about typing for maps.
⏯ Playground Link
Playground link with relevant code
💻 Code
// We can quickly address your report if:
// - The code sample is short. Nearly all TypeScript bugs can be demonstrated in 20-30 lines of code!
// - It doesn't use external libraries. These are often issues with the type definitions rather than TypeScript bugs.
// - The incorrectness of the behavior is readily apparent from reading the sample.
// Reports are slower to investigate if:
// - We have to pare too much extraneous code.
// - We have to clone a large repo and validate that the problem isn't elsewhere.
// - The sample is confusing or doesn't clearly demonstrate what's wrong.
export enum E {
'a-b-c' = 'abc.com',
'def' = 'def.com',
}
export type M = {
[e in E]?: 'literal';
}
const m0: M = {
[E['a-b-c']]: 'literal', // error here
[E.def]: 'literal' // no error
};
export {m0};
🙁 Actual behavior
When use Enum['value'] as the key of a mapping, values assigned to string literal types are not correctly recognized.
The string literal is always lifted as string type and there is an error Type of computed property's value is 'string', which is not assignable to type '"literal"'.
However, if Enum.value form is used as the mapping key, everything works fine.
🙂 Expected behavior
The aforementioned error should not occur.
Type check should be consistent when using Enum['value'] and Enum.value.