【发布时间】:2019-12-19 14:00:45
【问题描述】:
我有以下 TypeScript 代码。这是一个带有一些 specialKey 键的深层嵌套对象。
const obj = {
THIS: {
IS: {
MY: {
OBJECT: {
DUDE: {
specialKey: 'foo',
},
specialKey: 'bar',
},
},
},
CANNOT: {
BE: {
specialKey: 'baz',
},
},
},
};
我有一个函数可以解析这个结构并生成一个对象,只要有 specialKey 键,就会将键连接在一起。
const result = parseObj(obj);
/*
result = {
THIS_IS_MY_OBJECT: true,
THIS_IS_MY_OBJECT_DUDE: true,
THIS_CANNOT_BE: true,
}
*/
这里的函数供参考:
const parseObj = (obj: {}): any => {
const root = {};
const inner = (obj, prefix = ''): void => {
Object.keys(obj).forEach(key => {
if (key === 'specialKey') {
root[prefix] = true;
} else if (key === key.toUpperCase()) {
inner(obj[key], prefix === '' ? key : `${prefix}_${key}`);
}
});
};
inner(obj);
return root;
};
所以这段代码可以工作,但由于它是如此动态,我需要使用any作为返回类型,所以result没有智能感知,所以我不能输入result.~~~~并获得代码完成上面的对象键。是否可以创建一个类型或重新编写函数,这样我就不需要使用any?
【问题讨论】:
标签: typescript typescript-typings typescript-generics