fp-ts 选项、打字稿和未定义

fp-ts Option, Typescript and undefined

我正在尝试使用 fp-ts/OptionTypescript 创建一个简单的辅助函数,它接受一个 任意 值和returns 它作为 Option<T>.

export const toOption = <T>(val: T): Option<T> => {
  return fromNullable(val);
};

我遇到的问题是,无论我做什么,它都会在选项中包含 undefined 。 在 somefile.tsx 我有一个对象,其键值使用 toOption 函数。我需要该值是一个 Option only 但它读取的类型是 (property) airDate: Option<(string & Date) | undefined>

{
airDate:toOption(attributes.airDate), // (property) airDate: Option<(string & Date) | undefined>
}

使用类型保护

export const toOption = <T>(val: T): Option<T> => {
  if(typeof val == undefined) return none;
  return fromNullable(val);
};

三元

export const toOption = <T>(val: T): Option<T> => {
  return val ? some(val) : none;
};

有条件的

export const toOption = <T>(val: T): Option<T> => {
  if(!val) return none;
  return some(val)
};

它们最终都产生相同的类型:(property) airDate: Option<(string & Date) | undefined>

typescript 实用程序类型 NonNullable 在这种时候派上用场。

export const toOption = <T>(val: T): Option<NonNullable<T>> => {
  return fromNullable(val);
};

但是请注意 toOptionfromNullable 之间没有区别,所以如果您想使用名称 toOption,您可以将函数作为值分配给 toOption variable/const

export const toOption = fromNullable

不需要注解类型因为fromNullable的签名已经是<A>(a: A) => Option<NonNullable<A>>