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

请求实现TypeScript类型与值双层面的字段转换函数

解决方案

1. 实现 convertFieldsToBigInt 函数

通过泛型约束确保类型安全,同时完成值转换:

type a = {
  f1: string;
  f2: string;
  f3: number;
  f4: number;
};

function convertFieldsToBigInt<T extends object, K extends keyof T>(
  obj: T,
  fields: K[]
): Omit<T, K> & { [P in K]: bigint } {
  // 复制原对象,避免修改原数据
  const result = { ...obj };
  fields.forEach(field => {
    // 对指定字段应用BigInt转换
    result[field] = BigInt(result[field]) as typeof result[field];
  });
  return result as Omit<T, K> & { [P in K]: bigint };
}

// 使用示例
const obj: a = { f1: "123", f2: "abc", f3: 456, f4: 789 };
const b = convertFieldsToBigInt(obj, ['f1', 'f3']);
// b的类型自动推导为:{ f1: bigint; f2: string; f3: bigint; f4: number; }

类型约束说明:

  • T extends object:限制输入的obj为任意对象类型
  • K extends keyof T:确保fields数组中的元素都是obj的合法键,避免传入不存在的字段
  • 返回值类型Omit<T, K> & { [P in K]: bigint }:保留原对象未指定字段的类型,将指定字段的类型替换为bigint

2. 实现通用转换函数 convertFields

支持自定义转换逻辑,类型自动适配转换函数的输入输出:

function convertFields<
  T extends object,
  K extends keyof T,
  A,
  B
>(
  obj: T & { [P in K]: A }, // 确保指定字段的类型符合转换函数的输入要求
  fields: K[],
  converter: (value: A) => B
): Omit<T, K> & { [P in K]: B } {
  const result = { ...obj };
  fields.forEach(field => {
    result[field] = converter(result[field]) as typeof result[field];
  });
  return result as Omit<T, K> & { [P in K]: B };
}

类型约束说明:

  • A:转换函数的输入类型,约束原对象指定字段的类型必须与A兼容
  • B:转换函数的输出类型,转换后指定字段的类型会替换为B
  • T & { [P in K]: A }:强制原对象的指定字段类型匹配转换函数的输入,避免类型不兼容的错误

3. 基于通用函数实现 convertFieldsToBigInt

直接复用通用函数,传入BigInt作为转换逻辑即可:

function convertFieldsToBigInt<T extends object, K extends keyof T>(
  obj: T,
  fields: K[]
): Omit<T, K> & { [P in K]: bigint } {
  return convertFields(obj, fields, BigInt);
}

// 使用示例与效果完全一致
const obj: a = { f1: "123", f2: "abc", f3: 456, f4: 789 };
const b = convertFieldsToBigInt(obj, ['f1', 'f3']);

说明:

BigInt的类型签名为(value: number | string | bigint | boolean | ...) => bigint,TypeScript会自动推断A为原字段类型、B为bigint,保证类型安全的同时无需额外手动指定泛型参数。

内容的提问来源于stack exchange,提问作者A Question Asker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:17:10