1

假设我有以下类型:

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做到这一点的“方法”是什么?

4

3 回答 3

1

无需过多了解细节,我可以建议使用readonlyArray.compactwhich 正是这样做的(甚至具有相同的签名):

import { readonlyArray } from 'fp-ts';

const filterOptionals = readonlyArray.compact;
于 2020-11-22T23:47:11.927 回答
1

此示例的复杂性较低:

const filterOptionals = (optionalArray: OptionalArray): DatabaseWriteArray => 
    optionalArray.reduce((acc,elem)=>isSome(elem)?[...acc,elem.value]:acc,[])
于 2020-11-17T17:13:24.367 回答
0

我找到了以下方法来做到这一点:

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

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

于 2020-11-17T16:50:17.840 回答