You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留键的同时替换类型值?能否用泛型从类型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>;

实现逻辑拆解

  1. 遍历所有属性键:[K in keyof InitialType]会遍历初始类型的每一个属性,确保不会遗漏任何字段。
  2. 条件判断替换类型:对每个键K,判断它是否属于KeysToHandle集合:
    • 若是,将属性类型替换为typeof Prisma.DbNull
    • 若否,保留原属性的类型InitialType[K]
  3. 自动继承可选性:TypeScript映射类型会自动保留原属性的可选修饰符(比如b的?),无需额外处理。

验证结果

生成的Y类型完全符合预期:

type Y = {
  a: number;
  b?: typeof Prisma.DbNull;
  c: typeof Prisma.DbNull;
}

内容的提问来源于stack exchange,提问作者eugenedrvnk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:08