如何在TypeScript中定义含泛型对象的嵌套数组类型?
解决方案
要定义支持嵌套的数组类型,你需要使用递归类型处理嵌套数组场景。你之前的泛型仅处理数组的直接元素,没有递归适配元素本身为数组的情况,因此无法支持嵌套结构。
递归类型定义
// 基础元素:k1和k2必须为相同类型的对象 type ValidPair<T = unknown> = { k1: T; k2: T }; // 递归结构:可以是ValidPair,也可以是该结构组成的嵌套数组 type NestedStructure = ValidPair | readonly NestedStructure[];
验证示例
用你给出的测试结构验证:
const validExample: NestedStructure = [ {k1: 'str', k2: 'str'}, {k1: 12, k2: 23}, [ {k1: 'hh', k2: 'kk'}, {k1: true, k2: false} ] ]; // 完全符合类型约束 // 错误案例:k1和k2类型不同 const invalidPair: NestedStructure = {k1: 'str', k2: 12}; // 类型报错 // 错误案例:嵌套数组中包含不符合规则的元素 const invalidNested: NestedStructure = [ {k1: 'a', k2: 'b'}, ['not a valid pair'] // 类型报错 ];
类型说明
ValidPair<T>确保每个对象的k1和k2类型严格一致,T可以是任意类型(字符串、数字、布尔等)。NestedStructure是递归联合类型:要么是单个ValidPair,要么是由NestedStructure组成的数组,自然支持任意层级的嵌套。
内容的提问来源于stack exchange,提问作者W.W
相关产品推荐
相关产品推荐

