Effect-TS / effect

An ecosystem of tools to build robust applications in TypeScript

Home Page:https://effect.website

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

From Discord: Compilation Error with Predicate.isNotNull in effect v3

effect-bot opened this issue · comments

Summary

The discussion revolves around a compilation error encountered when migrating to Effect v3 from v2, specifically when using Predicate.isNotNull with complex types (e.g., custom types or objects) in TypeScript. The error occurs when attempting to filter out null values from an Effect that can yield either a complex type or null. The provided code snippet demonstrates the issue when applying Predicate.isNotNull to filter out null values from an Effect that yields a Result type or null.

The error message indicates a type mismatch, where TypeScript cannot assure that the result of the operation will not be null, leading to a failure in assigning the Effect of a potentially null value to an Effect expected to yield only Result.

A proposed solution involves modifying the signature of isNotNull to use NonNullable<A> instead of Exclude<A, null>, aiming to improve type inference and ensure that the operation correctly excludes null values from its type. However, as an immediate workaround, adding an explicit type annotation to the isNotNull call is suggested. This involves specifying the generic type parameter explicitly to guide TypeScript's type inference, ensuring that the Effect.filterOrFail method can correctly infer that the result will not include null values.

Key Takeaways:

  1. Type Inference Limitations: The issue highlights challenges in TypeScript's type inference, especially with complex types and operations that manipulate types, such as excluding null.

  2. Workaround: Explicit type annotations can serve as a practical workaround for type inference issues, guiding the TypeScript compiler to the correct types.

  3. Potential Library Improvement: Modifying the isNotNull signature to use NonNullable<A> suggests a possible improvement in the Effect library to better support TypeScript's type system and common use cases involving nullability checks.

  4. Migration Challenges: Migrating between major versions of libraries can uncover subtle type-related issues, emphasizing the importance of thorough testing and understanding of underlying type system changes.

Discord thread

https://discord.com/channels/795981131316985866/1233305955987488808