我创建了一个函数,它接受两个体系 struct 的参数.我不执行规则来给用户灵活性,这是我现在头疼的?.不管怎么说.
我想判断一下这个条目有没有第一层的功能.例如:
// Function in first level
const entry = {
data: 10,
upload:() => {},
otherData: {},
download: () => {}
}
// Function in deep level
const entry = {
photo: {
total: 10,
upload: () => {}
},
videos: {
total: 10,
upload:() => {}
}
}
如果TypeScrip在第一层找到一个函数,我希望它返回类型"Slice",即使函数也存在于深层.一旦它发现第一级的函数,它应该停止判断并返回"Slice".
如果第一级不存在任何函数,则应返回"group".不需要判断其他级别.
Note:返回值应为slice
或group
,而不是联合slice | group
slice
如果函数存在于第一级,否则返回group
要通过我的所有测试用例(除了一个测试用例),最接近的解决方案是像这样undo撤消我的判断
type GetType<S, k = keyof S> = S[k & keyof S] extends Exclude<S[k & keyof S],Function> ? "group" : "slice"
工作正常,但失败,并将空对象作为属性并返回group
// ❌ This fail and give group as type. Expected type is slice
const entry = {
data: {} // empty object,
upload: () => {}
}
// ✅ This works and give slice as type as Expected
const entry = {
data: any value // empty object,
upload: () => {}
}
所以,是的,我们可以找到一个排除{}
的方法.这导致了所有的问题.也许我累了,我看不清楚了,?.不管怎样,我需要一个新的视角来帮助我.