microsoft / microsoft/TypeScript
Make the type guarding on 'typeof' be transitive.
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 2.7.0
Search Terms:
typeof + transitive + type guard + typeof same
Code
function test(a: string | number, b: string | number) {
if (typeof a === typeof b && typeof a === 'string') return b.length
}
Expected behavior:
variable b be asserted as string type.
Actual behavior:
TS report: Property 'length' does not exist on type 'string | number'. at b.length
Playground Link:
Playground
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 2.7 reproduction in the issue's Playground link and verify the reported error for b.length. Then locate the type-checking entry point responsible for typeof narrowing and determine what tests cover related type guards. Done means the shown function accepts b.length when both operands are narrowed to string.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100