Typescript ReasonML';s选项类型?

Typescript ReasonML';s选项类型?,typescript,reason,rescript,Typescript,Reason,Rescript,在ReasonML中,选项类型是一个变量,可以是Some('a)或None 我将如何在typescript中对同一事物进行建模?也许,类似这样: export type None = never; export type Some<A> = A; export type Option<A> = None | Some<A> 导出类型无=从不; 导出类型某些类型脚本没有直接等效项。取而代之的是,您要做什么取决于您使用它的目的:属性、函数参数、变量或函数返回

在ReasonML中,
选项
类型是一个变量,可以是
Some('a)
None


我将如何在typescript中对同一事物进行建模?

也许,类似这样:

export type None = never;

export type Some<A> = A;

export type Option<A> = None | Some<A>
导出类型无=从不;

导出类型某些

类型脚本没有直接等效项。取而代之的是,您要做什么取决于您使用它的目的:属性、函数参数、变量或函数返回类型

如果将其用于属性(在对象/接口中),则可能会使用,例如:

interface Something {
   myProperty?: SomeType;
//           ^−−−−− marks it as optional
}
同样的符号也适用于函数参数

对于变量或返回类型,您可以使用带
未定义
,例如:

let example: SomeType | undefined;
// or
let example: SomeType | null = null;

第一种说法是
示例
可以是
某个类型
未定义
,第二种说法是
某个类型
。(注意后者需要一个初始值设定项,否则,
示例
将是
未定义的
,并且这对于
SomeType | null
来说不是有效值)

从技术上讲,
可选
将只是
MyType | null
示例。因此,您可以执行
type Optional=T | null
。然而,我认为这并不像实际的可选类型那样有用——您可能想要更健壮的东西。@KonradRudolph我不认为OP意味着可选属性。可选类型是可能存在或不存在的结果。它是
null
的一个更明确的版本,它没有值。根据语言的不同,可能会有更好的空安全处理方法,如果某个操作返回
None
,您仍然可以链接更多解析为no-op的操作,而不必一直手动执行类型检查或添加空保护。我很喜欢这个想法,但是我认为您不希望
从不
作为
,因为变量/属性/返回值可能具有“无”值——否则您就失去了可选的全部意义。除了
未定义
之外,我不确定您会使用什么,但是,这在某种程度上回避了使用类型的问题。。。通常情况下,可选类型的作用不止于此。我曾考虑将null用作None,但不确定OP如何标记None值。无论如何,我留下了我会选择的软件包的链接,如果我对使用fpI中的monads感兴趣,我会回应@T.J.Crowder的担忧-我不认为
从不
适合这里。通常,当您可以处理任意一种情况时,您需要一个
可选的
,因此您需要
getFromDb(id:number):可选的
,并且您可以更统一地将结果处理为
getFromDb(42)?。name
。这在
从不
的情况下是不可能的,但如果返回
null
,则是不可能的。再说一次,可选类型并不是真正的可选链接-前面的代码应该返回一个
可选的
,您可以继续使用它进行操作,而不必担心空值,直到您“打开”它为止。