• 日本語
  • no-throw-in-callback

    Result.andThen / Result.map などの @praha/byethrow の関数に渡すコールバック内での throw 文を禁止します。

    ルールの詳細

    @praha/byethrow のコールバック内でthrowすると Result の制約が破られます。エラーを表すには Result.fail() を使用し、エラーハンドリングを明示的かつ合成可能に保ってください。

    誤り

    import { 
    import Result
    Result
    } from '@praha/byethrow';
    // ❌ コールバック内でthrow const
    const result: Result.Result<number, never>
    result
    =
    import Result
    Result
    .
    const pipe: <Result.Result<32, never>, Result.Result<number, never>>(a: Result.Result<32, never>, ab: (a: Result.Result<32, never>) => Result.Result<number, never>) => Result.Result<number, never> (+25 overloads)
    pipe
    (
    import Result
    Result
    .
    const succeed: <32>(value: 32) => Result.Result<32, never> (+1 overload)
    succeed
    (32),
    import Result
    Result
    .
    const andThen: <Result.Result<32, never>, Result.Result<number, never>>(fn: (a: 32) => Result.Result<number, never>) => (result: Result.Result<32, never>) => Result.Result<number, never> (+1 overload)
    andThen
    ((
    value: 32
    value
    ) => {
    if (
    value: 32
    value
    < 0) throw new
    var RangeError: RangeErrorConstructor
    new (message?: string, options?: ErrorOptions) => RangeError (+3 overloads)
    RangeError
    ('negative value');
    return
    import Result
    Result
    .
    const succeed: <number>(value: number) => Result.Result<number, never> (+1 overload)
    succeed
    (
    value: 32
    value
    * 2);
    }), );

    正しい

    import { 
    import Result
    Result
    } from '@praha/byethrow';
    // ✅ 失敗Resultを返す const
    const result: Result.Result<number, NegativeValueError>
    result
    =
    import Result
    Result
    .
    const pipe: <Result.Result<32, never>, Result.Result<number, NegativeValueError>>(a: Result.Result<32, never>, ab: (a: Result.Result<32, never>) => Result.Result<number, NegativeValueError>) => Result.Result<number, NegativeValueError> (+25 overloads)
    pipe
    (
    import Result
    Result
    .
    const succeed: <32>(value: 32) => Result.Result<32, never> (+1 overload)
    succeed
    (32),
    import Result
    Result
    .
    const andThen: <Result.Result<32, never>, Result.Failure<NegativeValueError> | Result.Success<number>>(fn: (a: 32) => Result.Failure<NegativeValueError> | Result.Success<number>) => (result: Result.Result<32, never>) => Result.Result<number, NegativeValueError> (+1 overload)
    andThen
    ((
    value: 32
    value
    ) => {
    if (
    value: 32
    value
    < 0) return
    import Result
    Result
    .
    const fail: <NegativeValueError>(error: NegativeValueError) => Result.Result<never, NegativeValueError> (+1 overload)
    fail
    (new
    constructor NegativeValueError(message?: string, options?: ErrorOptions): NegativeValueError (+1 overload)
    NegativeValueError
    ());
    return
    import Result
    Result
    .
    const succeed: <number>(value: number) => Result.Result<number, never> (+1 overload)
    succeed
    (
    value: 32
    value
    * 2);
    }), );