fp-ts选项,Typescript和未定义



我正在尝试使用fp-ts/OptionTypescript创建一个简单的辅助函数任意值并作为Option<T>返回。

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

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

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

使用type-guards

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变量/const

export const toOption = fromNullable

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

最新更新