microsoft / microsoft/TypeScript-Website
More examples of `infer`
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2.6k
- Forks
- 1.5k
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 7
Description
Documentation is lacking in examples of how to use infer in the Conditional Types section.
For example, one can use infer to unshift an array literal:
type Unshift<T extends any[]> = T extends [infer Head, ...infer Tail] ? Head : never;
type A = Unshift<['a','b','c']>
type A is literal 'a'.
Another useful example would be to demonstrate infer within a template to parse a string type:
type TSVersion = "4.1.2"
type ExtractSemver<Semver extends string> =
Semver extends `${infer Major}.${infer Minor}.${infer Patch}` ?
{ major: Major, minor: Minor, patch: Patch } : never
type TS = ExtractSemver<TSVersion>
type TS is literal { major: "4", minor: "1", patch : "2"}
Also useful would be to demonstrate the default of infer will be a single char, and to demonstrate recursion:
type NotEmptyString<S extends string> = S extends "" ? never : S;
type Reverse<S extends string> =
S extends "" ? S :
S extends `${infer B}${infer E}` ? `${Reverse<E>}${B}` : never;
type WorkItAndReverseIt = Reverse<"Foobar">;
type WorkItAndReverseIt is literal rabooF.
Contributor guide
No contributing guide indexed for this repository
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 in the Conditional Types documentation section and review the existing examples of infer. Add examples covering array unshifting, template-literal parsing, single-character inference, and recursion, then verify that the examples render correctly and their stated resulting types are accurate.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 65/100