如何编写支持固定已知键与动态嵌套键的TypeScript Interface?
解决方案
直接使用递归的TS类型定义即可,支持任意层级的嵌套结构,完全符合你给出的对象校验要求:
type MyInterface = { // 已知三个字段的类型定义,按需设置是否可选 foo?: number; baz?: null; qux?: string; // 交叉类型定义剩余任意字段的类型为同结构嵌套对象 } & { [key: string]: MyInterface | undefined; }
校验验证
你给出的测试用例可以直接通过编译器校验:
const foo: MyInterface = { foo: 1, dynamicKey: { baz: null } }
说明
- 如果要求每一层嵌套对象都必须存在
foo字段,去掉foo后面的可选标记?即可,此时嵌套对象未声明foo时编译器会抛出错误。 - 使用交叉类型而非接口内直接写索引签名的优势是可以严格限制除三个已知字段外,其余字段的值只能是同结构的嵌套对象,不会出现类型混淆。
内容的提问来源于stack exchange,提问作者lmenus
相关产品推荐
相关产品推荐

