каким-либо похожим, но лаконичным способом? 
                  
                  
                  (это swift, главное здесь enum с generics и associated values и его последующая деструктуризация + шортхэнд для лямбды с дженериками)
                  
                  
                  
                  
                  
                  enum ServiceResult<DTO> {
                  
                  
                      case ok(DTO)
                  
                  
                      case fail(Error)
                  
                  
                  }
                  
                  
                  
                  
                  
                  typealias ServiceResponder<DTO> = (ServiceResult<DTO>) -> Void
                  
                  
                  
                  
                  
                  struct MyResult {
                  
                  
                   ....
                  
                  
                  }
                  
                  
                  
                  
                  
                  let data: ServiceResult<MyResult>  = /* */
                  
                  
                  
                  
                  
                  switch data {
                  
                  
                  case .ok(let result):
                  
                  
                   print(result);
                  
                  
                  case .fail(let error):
                  
                  
                   print(error)
                  
                  
                  }
                  
                  
                
Если я правильно тебя понял, то Discriminated Union
спс, покурю
Готовая реализация https://gcanti.github.io/fp-ts/modules/Option.ts.html
https://gcanti.github.io/fp-ts/modules/Either.ts.html
Обсуждают сегодня