【问题标题】:Best way to filter out none's from Array of options从选项数组中过滤掉无的最佳方法
【发布时间】:2020-11-17 16:37:30
【问题描述】:

假设我有以下类型:

type OptionalArray = ReadonlyArray<Option<number>>
type DatabaseWriteArray = ReadonlyArray<number>

那么如何在类型之间进行转换?以下工作但感觉超级混乱:

const filterOptionals = (optionalArray: OptionalArray): DatabaseWriteArray => {
  const filteredNullableArray = optionalArray.filter(isSome).map(toNullable)
  return filteredNullableArray.filter(num => num !== null)
}

在这一点上,我什至不确定如果我必须立即将它们退出为可空值,我为什么还要为选项而烦恼。我可以通过使用number | null 少一步来获得相同的结果。那么什么是“fp-ts 方式”来做到这一点?

【问题讨论】:

    标签: typescript optional fp-ts


    【解决方案1】:

    无需过多介绍细节,我可以建议使用readonlyArray.compact,它可以做到这一点(甚至具有相同的签名):

    import { readonlyArray } from 'fp-ts';
    
    const filterOptionals = readonlyArray.compact;
    

    【讨论】:

      【解决方案2】:

      这个例子的复杂度较低:

      const filterOptionals = (optionalArray: OptionalArray): DatabaseWriteArray => 
          optionalArray.reduce((acc,elem)=>isSome(elem)?[...acc,elem.value]:acc,[])
      

      【讨论】:

        【解决方案3】:

        我找到了以下方法:

        const filterOptionals = (optionalArray: OptionalArray): DatabaseWriteArray => {
          const filteredNullableArray = optionalArray.filter(isSome).map(item => item.value)
        }
        

        这感觉更干净(尽管我显然愿意接受其他建议)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-04
          • 2019-05-13
          • 2020-08-01
          • 1970-01-01
          • 2020-02-02
          相关资源
          最近更新 更多