AFAIK,没有类型对类型的概念。但是,您可以使用 mapped types 从另一种类型创建一种类型。
const list = ["A", "B", "C"] as const;
type ListKey = typeof list[number];
// type MappedList = {
// A: "property";
// B: "property";
// C: "property";
// }
type MappedList = {
[Prop in ListKey]: 'property'
}
据我了解,您还需要确保 A 是 boolean,B 是 number 和 C 是 string。为此,您需要创建一个映射和条件类型:
const list = ["A", "B", "C"] as const;
type ListKey = typeof list[number];
type TypeMap = {
A: boolean,
B: number,
C: string
};
/**
* If T is a subtype of TypeMap
* and keyof T extends keyof TypeMap
*/
type BuildMappedList<T> = T extends TypeMap ? keyof T extends keyof TypeMap ? T : never : never;
/**
* Ok
*/
type MappedList = BuildMappedList<{
A: true,
B: 2,
C: "three",
}>
/**
* Never
*/
type MappedList2 = BuildMappedList<{
A: true,
B: 2,
C: "three",
D: [2] // because of extra D property
}>
/**
* Never
*/
type MappedList3 = BuildMappedList<{
B: 2,
C: "three",
}> // because no A property
/**
* Never
*/
type MappedList4 = BuildMappedList<{
A: false,
B: [2], // because B is not a number
C: "three",
}>
enter link description here