gleam-lang/gleam

Improve TS type narrowing

Open

#5715 opened on May 13, 2026

View on GitHub
 (1 comment) (1 reaction) (0 assignees)Rust (21,417 stars) (960 forks)batch import
help wanted

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