问题描述
type person = {
name: string,gender: string,age: int
}
,并且有许多适合该类型的记录。我想做的只是从此人中提取[姓名,年龄]并进行新记录。为此,我最初考虑使用类似的模式匹配技术,
switch(input) {
|({name,_,gender} => //make a new record by extracting only name and age
|_ => ();
}
这种方法有意义吗?如果是这样,我应该怎么做? 如果不是,从记录中删除键(记录是不可变的,因此这实际上没有意义)或从现有记录中提取另一条记录的正确方法是什么?
解决方法
您实际上不需要切换到模式匹配。
基本上,仅使用
let {name,gender,age: _} = input
足以提取所需的两个属性。
您可以使用以下辅助功能:
type person = {
name: string,gender: string,age: int,};
type nameAndGender = {
name: string,};
let personToNameAndGender = (person) => {
let {name,age: _} = person;
{name,gender};
};
请记住,您需要事先定义两种记录类型。
注意:如果您只匹配部分记录,也可以省略年龄
let {name,gender}: person = person;
但是您需要注释它,因为类型系统无法自动找出它是两个记录中的哪个。
这里是working example。