More examples of `infer`

Open Beginner friendly
#2,998 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
65/100
Issue type
Documentation
Clarity
Clearly specified
Activity status
Stale
Tech stack
typescript
Domain
documentation

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.

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.

Dominant language
TypeScript
Stars
2.6k
Forks
1.5k
Avg merge
1d 12h
Merged PRs (30d)
5

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/TypeScript-Website

All issues in microsoft/TypeScript-Website

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.