【发布时间】:2018-04-09 20:00:20
【问题描述】:
我真的不知道如何问这个问题,所以我认为最好的方法是举一个我正在尝试做的事情的例子。假设我有以下对象:
const obj = {
one: 'some string',
two: new Set<string>(),
};
现在我想编写一个函数来接收该对象并将Sets 转换为相同类型的Arrays。
这是无类型的 javascript 实现:
const obj = {
one: 'some string',
two: new Set().add('one').add('two'),
};
function convertToArrays(objWithSets) {
return Object.entries(objWithSets).reduce((objectWithArrays, [key, value]) => {
if (value instanceof Set) {
objectWithArrays[key] = Array.from(value);
} else {
objectWithArrays[key] = value;
}
return objectWithArrays;
}, {});
}
console.log('converted', convertToArrays(obj));
我怎样才能正确输入上述函数?澄清一下:它可以接收任何对象(不仅仅是一个、两个示例),如果它看到 Set<T>,它会将其转换为一个Array<T>。
我知道它需要捕获内部Set 的类型(在本例中为string)并有条件地将该类型映射到Array<string>。
谢谢!
【问题讨论】:
-
啊,你的意思是如果对象中的任何键引用了一个集合,请将其转换为一个数组。
-
@y2bd 是的,我很抱歉????
标签: typescript typescript2.8 conditional-types