我正在尝试使用fp-ts/Option
和Typescript创建一个简单的辅助函数取任意值并作为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);
};
但是请注意,toOption
和fromNullable
之间没有区别,所以如果您想使用toOption
的名称,您可以将函数作为值赋给toOption
变量/const
export const toOption = fromNullable
您不需要注释类型,因为fromNullable
的签名已经是<A>(a: A) => Option<NonNullable<A>>