TypeScript嵌套对象类型定义



我想定义接口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

看到操场

最新更新