我想定义接口Obj以匹配下面console.log
中的对象结构interface Obj {
[key: string]: number or {} // <-------- don't know how to define
}
const returnNestedProp = (obj: Obj) => {
return obj?.a?.b;
};
console.log(returnNestedProp({ a: 1 }));
console.log(returnNestedProp({ a: { b: { c: 3 } } }));
console.log(returnNestedProp({ b: { a: 1 } }));
console.log(returnNestedProp({ a: { b: 2 } }));
打印稿。当我有一个对象或数字时,我不知道如何定义接口。嵌套对象
我认为您需要这样的树类型:
interface Obj {
[key: string]: number | Obj
}
这意味着Obj
的每一个性质可以是number
,也可以是另一个Obj
。这允许树形嵌套到几乎无限的深度。
然后钻入,你只需要检查它是否是typeof obj.someProp === 'object'
。如果返回true,那么Typescript就知道这个属性是Obj
而不是number
。
const returnNestedProp = (obj: Obj) => {
if (typeof obj.a === 'object') {
return obj.a.b;
}
return
};
检验是否有效:
console.log(returnNestedProp({ a: 1 })); // undefined
console.log(returnNestedProp({ a: { b: { c: 3 } } })); // { c: 3 }
console.log(returnNestedProp({ b: { a: 1 } })); // undefined
console.log(returnNestedProp({ a: { b: 2 } })); // 2
看到操场