从脚本中的变量类型访问键



我是一个很新的处方,并试图了解事情是如何工作的。在我的情况下,我想从这样的变体类型访问键。

type personType = Person({name: string, age: int})
let person = Person({
name: "Jane",
age: 35,
}) 
Js.log(person.name) // -> Error: The record field name can't be found.

下面,使用一个记录,正在工作:

type personRecord = {
name: string,
age: int,
}
let personAsRecord = {name: "Bob", age: 30}
Js.log(personAsRecord.name)

另一个选择是使用模式匹配,它也可以工作:

let personName = switch person {
| Person({name}) => name
}
Js.log(personName)

所以我的问题是:这是因为类型是一个变体,类型不像typescript是结构类型吗?访问变体键的唯一方法是使用模式匹配吗?

访问变量键的唯一方法是使用模式匹配吗?

是的。

尽管您也可以在let绑定中解构/模式匹配:

let Person({name}) = person

和函数实参:

let print = (Person({name})) => Js.log(name)

这是因为类型是一个变体,类型不是与typescript不同的结构类型吗?

我真的不明白结构类型和它有什么关系。一个变体可以有,而且通常有多个"case"。有不同的有效载荷,如果你不知道它们实际上在那里,你就不能安全地访问它们的属性。因此,您必须进行模式匹配以确定它是哪种情况,并且然后您可以访问其属性。

最新更新