Skip to content

feat: Experimental --discriminator and --require-discriminator #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 10, 2025

Conversation

eliassjogreen
Copy link
Member

@eliassjogreen eliassjogreen commented Apr 10, 2025

See #10

Still very experimental.

Allows you to generate fetch types which look like the following:

// With --experimental-discriminator=api
function fetch<T extends "api" = "api">(input: `/api/v1/users/login`);

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

This is also helpful for projects which are using multiple different backends as a way of namespacing the types for each:

// With --experimental-discriminator=imdb --experimental-require-discriminator
function fetch<T extends "imdb">(input: `/api/v1/movies`);

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

To use the fetch with a discriminator specified you simply need to pass it as the first generic argument:

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

// Works!
fetch<"api">("/api/v1/users/login", { ... });

// Fails!
fetch<"imdb">("/api/v1/users/login", { ... });

// Falls back to the default `fetch` type which isn't going to be typed.
// When not using the `--experimental-require-discriminator` flag this
// will still work as before. E.g. returning the types if any are found
// matching the function signature.
fetch("/api/v1/users/login", { ... });

@eliassjogreen eliassjogreen changed the title feat: Implement --discriminator and --require-discriminator flags feat: Experimental --discriminator and --require-discriminator Apr 10, 2025
@eliassjogreen eliassjogreen merged commit 19bdd74 into main Apr 10, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant