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

如何在TypeScript中修改接口所有键的类型?

解决TypeScript中克隆接口并统一修改值类型的问题

你遇到的这个需求,正好是TypeScript映射类型的拿手场景!你已经找到了解决思路,其实还可以把写法优化得更清晰、更复用~

你的可行方案回顾

你直接在变量类型里写{ [key in keyof IValues]: boolean }已经能解决类型错误的问题,这个写法本质上就是手动实现了一个映射类型:

const fun = <IValues>(values: IValues) => {
  // 处理值以初始化valuesModified1和valuesModified2
  const originalValues: IValues = valuesModified1; // {a: 'foo', b: 'bar'}
  const modifiedValues: { [key in keyof IValues]: boolean } = valuesModified2; // {a: true, b: false}
  return {originalValues, modifiedValues};
};

更优雅的复用写法

如果以后需要多次用到这种“保留原键、替换值类型”的转换,建议把这个映射逻辑提取成一个可复用的泛型类型,代码可读性和维护性会更好:

// 定义通用转换类型:接收原类型T,返回键相同、值为boolean的新类型
type MapValuesToBoolean<T> = { [K in keyof T]: boolean };

const fun = <IValues>(values: IValues) => {
  // 处理值以初始化valuesModified1和valuesModified2
  const originalValues: IValues = valuesModified1;
  const modifiedValues: MapValuesToBoolean<IValues> = valuesModified2;
  return {originalValues, modifiedValues};
};

原理说明

映射类型[K in keyof T]会自动遍历原类型T的所有键,然后将每个键对应的值类型替换成你指定的类型(这里是boolean)。这种方式完全满足你“克隆接口并修改所有键类型”的需求,而且TypeScript会严格保证键的一致性——如果原接口新增或删除键,转换后的类型会自动同步,不会出现类型不匹配的问题。

要是以后需要把值类型改成number或者其他类型,只需要修改MapValuesToBoolean里的类型定义就行,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:48:12