microsoft / microsoft/TypeScript
Typescript failed to expand type in generic for unknown reason
Open
Nobody has claimed this yet.
Bug
Cursed?
Domain: Conditional Types
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 3.1.3
Search Terms:
Code
type Or<T> = T [
{
[K in keyof T]: T[K] extends ((...arg:any[])=>any)?
never:
K
} [keyof T]
]
// F is unknown
type F = Or<[
string,
number
]>
// F_ is string|number
type F_ = ([
string,
number
])[
{
[K in keyof ([
string,
number
])]: ([
string,
number
])[K] extends ((...arg:any[])=>any)?
never:
K
} [keyof ([
string,
number
])]
]
Expected behavior:
I will get the type string|number for both case
Actual behavior:
The generic failed to expand the type and make F as unknown for unknown reason,
while manully inline it in F_ typed as expected
Playground Link:
link
Related Issues:
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the TypeScript 3.1.3 Playground example linked in the issue and reproduce the difference between the generic Or and the inline F_ type. Investigate why Or<[string, number]> becomes unknown; done means the generic case resolves to string|number as expected.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100