gleam-lang/gleam

Improve TS type narrowing

Open

#5,715 opened on May 13, 2026

View on GitHub
 (5 comments) (1 reaction) (0 assignees)Rust (960 forks)batch import
help wanted

Repository metrics

Stars
 (21,417 stars)
PR merge metrics
 (Avg merge 8d 6h) (59 merged PRs in 30d)

Description

In the following issue, the example are made with a simple Option(a) in Gleam.

When using an Option(a) to TS, we know for sure that the expected type is Option$, so we can type functions signatures as (value: $option.Option$<EL>) => ..... When using the new API, "pattern matching" is defined as $option.Option$isSome(value)). The type narrowing works, but will refine value from Option$<EL> to Option$<unknown>, because isSome is defined as export function Option$isSome<EL>(value: any): value is Option$<unknown>;.

Thanks to TS and function overloading, we could do way better, and keep the generic type, while narrowing to the correct type. We could write an overload export function Option$isSome<EL>(value: Option$<EL>): value is Some<EL>. That way, it would keep the generic.

Contributor guide