如何保留键的同时替换类型值?能否用泛型从类型X得到类型Y?
如何通过泛型将指定键的类型从null替换为Prisma.DbNull?
完全可以实现这个需求,我们可以利用TypeScript的映射类型结合条件类型构建Generic泛型,自动保留原属性的可选性并替换指定键的类型。
完整实现代码
import { Prisma } from "@prisma/client"; // 初始类型 type X = { a: number; b?: null; c: null; } // 需要处理的键集合 type Keys = 'b' | 'c' // 目标泛型实现 type Generic<InitialType, KeysToHandle extends keyof InitialType> = { [K in keyof InitialType]: K extends KeysToHandle ? typeof Prisma.DbNull : InitialType[K] }; // 验证结果类型 type Y = Generic<X, Keys>;
实现逻辑拆解
- 遍历所有属性键:
[K in keyof InitialType]会遍历初始类型的每一个属性,确保不会遗漏任何字段。 - 条件判断替换类型:对每个键
K,判断它是否属于KeysToHandle集合:- 若是,将属性类型替换为
typeof Prisma.DbNull - 若否,保留原属性的类型
InitialType[K]
- 若是,将属性类型替换为
- 自动继承可选性:TypeScript映射类型会自动保留原属性的可选修饰符(比如
b的?),无需额外处理。
验证结果
生成的Y类型完全符合预期:
type Y = { a: number; b?: typeof Prisma.DbNull; c: typeof Prisma.DbNull; }
内容的提问来源于stack exchange,提问作者eugenedrvnk
相关产品推荐
相关产品推荐

