supermacro / neverthrow

Type-Safe Errors for JS & TypeScript
MIT License
4.06k stars 85 forks source link

combineWithAllErrors doesn't narrow down type of items in list #515

Open Sebastian-Nielsen opened 12 months ago

Sebastian-Nielsen commented 12 months ago
    if (combineWithAllErrors([ result1, result2, result3 ]).isErr()) {
            console.log("some error")
        return err();
    }

    // We know for sure know that result1, result2, and result3 are ok:
    result1.value; // TS2339: property 'value' does not exist on type 'Result' 

    // ^^ it seems typescript doesn't know?

I am forced to do:

    if (combineWithAllErrors([ result1, result2, result3 ]).isErr()) {
            console.log("some error")
        return err();
    }

    if (result1.isErr()) {    
        return 1 as any;
    }
        console.log(result1.value); // works

Can we do something about the fact that combineWithAllErrors doesn't narrow down the type for the items in the provided list?

m-shaka commented 2 months ago

combineWithAllErrors generates a new Result and you have to handle it. It's not supposed to narrow down the type.

If you want to write something like that, you need to add another utility function