我有一个类型数组,object[] & Tree[]
但arr.map(child => ...)
推断了孩子的类型object
而不是object & Tree
。
有没有其他方法可以避免这种情况?
值得注意的是Tree
扩展,object
但是打字稿似乎没有意识到这一点,并且将交叉点类型的两个部分合并了。
编辑-最小的可复制示例:
这是人为的,但是基于我最近的另一个问题:将打字稿对象类型转换为引用自身的映射类型
interface BasicInterface {
name: string;
children: object[];
}
function getBasic<T extends object>(input: T): BasicInterface {
return input as BasicInterface;
}
export const basicTree = getBasic({
name: 'parent',
children: [{
name: 'child',
children: []
}]
});
关键是下面的代码可以访问“ basicTree”及其推断的类型。对于此示例,我已经定义了BasicInterface,但实际上它是自动生成的,并且我还没有找到以编程方式生成递归接口的方法。
我想在原始接口定义的基础上添加子代的递归类型。
我试图用正确的递归定义来“增强” basicTree类型的定义,而不是完全在代码中重新定义BasicInterface,因为这可能是很多样板。
但这在获得儿童类型时会下降。也许有一个更简单的解决方案?
type RestoredInterface = typeof basicTree & {
children: RestoredInterface[]
};
function getTree(basic: BasicInterface): RestoredInterface {
return basic as RestoredInterface;
}
const restoredTree = getTree(basicTree);
const names = restoredTree.children.map(child => child.name);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句