gleam-lang/gleam

Improve TS type narrowing

Open

#5,715 建立於 2026年5月13日

在 GitHub 查看
 (1 留言) (1 反應) (0 負責人)Rust (21,417 star) (960 fork)batch import
help wanted

描述

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.

貢獻者指南

Improve TS type narrowing · gleam-lang/gleam#5715 | Good First Issue