ts 当一个属性为联合类型时,如何通过它的取值来控制其他属性的类型?-灵析社区

JayCoder

我想要通过 IMap 这接口来获得一个类型,类型中有两个属性type 和 props, props 属性的类型会随着 type 属性的取值发生改变,type 的类型为 IMap 接口中的所有属性名的联合类型,props 的类型就是 type 取值在 IMap 中同名属性对应的类型。 interface IMap { a: number, b: string, c: boolean //... } type Config = { type: 'a', props: IMap['a'] } | { type: 'b', props: IMap['b'] } | { type: 'c', props: IMap['c'] } // ... 通过这种方式写联合类型的方式可以达到我想要的结果,但是 IMap 中的属性有特别多,做不到将所有的组合都罗列出来,有什么解决办法吗?

阅读量:15

点赞量:0

问AI
interface IMap { a: number; b: string; c: boolean; // ... 扩展更多属性 } // 用映射类型和条件类型 type Config = { [K in keyof IMap]: { type: K; props: IMap[K]; } }[keyof IMap]; // 例子: const configA: Config = { type: 'a', props: 42 }; // 正确 const configB: Config = { type: 'b', props: "hello" }; // 正确 const configC: Config = { type: 'c', props: true }; // 正确