如何根据另一个字段值创建字段类型?
How to create a field type based on another field value?
我正在尝试为以下简化示例编写类型。
我如何告诉 Container
配置将从 component
派生?
type Container = {
component: "A" | "B" | "C";
config: AConfig | BConfig | CConfig;
}
type App = {
containers: Container[];
}
我试过使用泛型,但是 App
中的 containers
不能有多个类型。
type Config = {
A: AConfig;
B: BConfig;
C: CConfig;
}
type Container<T extends keyof Config> = {
component: T;
config: Config[T];
}
type App<T> = {
containers: Container<T>[];
}
您需要一个映射类型来迭代 Config
类型的键并创建配对。
type ConfigContainer = {
[K in keyof Config]: { component: K, config: Config[K] }
}[keyof Config]
这将创建一个对象类型,该对象类型将所有可能的配对作为值,然后您通过该对象自己的键对该对象进行索引,以获取作为联合的值类型。
我正在尝试为以下简化示例编写类型。
我如何告诉 Container
配置将从 component
派生?
type Container = {
component: "A" | "B" | "C";
config: AConfig | BConfig | CConfig;
}
type App = {
containers: Container[];
}
我试过使用泛型,但是 App
中的 containers
不能有多个类型。
type Config = {
A: AConfig;
B: BConfig;
C: CConfig;
}
type Container<T extends keyof Config> = {
component: T;
config: Config[T];
}
type App<T> = {
containers: Container<T>[];
}
您需要一个映射类型来迭代 Config
类型的键并创建配对。
type ConfigContainer = {
[K in keyof Config]: { component: K, config: Config[K] }
}[keyof Config]
这将创建一个对象类型,该对象类型将所有可能的配对作为值,然后您通过该对象自己的键对该对象进行索引,以获取作为联合的值类型。