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

如何优化TypeScript的transform函数类型以支持可选键?

问题解决:让transform函数支持含可选键的类型

原代码中transform函数使用Record<K, V>作为输入类型约束,但Record要求所有指定的键都必须存在(必填),而包含可选键的类型(比如示例中的Foo)无法满足这个约束,导致类型报错。

优化后的类型定义:

export interface KeyValue<K, V> {
  key: K;
  value: V;
}

// 修改泛型约束,直接接受任意对象类型T
declare function transform<T extends object>(
  input: T
): Array<{ [K in keyof T]: KeyValue<K, Exclude<T[K], undefined>> }[keyof T]>;

interface Foo {
  foo: string;
  bar?: number;
}

declare const foo: Foo;

const a = transform(foo); 
// a的类型为:Array<KeyValue<"foo", string> | KeyValue<"bar", number>>

优化说明:

  1. 把输入类型从Record<K, V>改为泛型T extends object,这样可以接受任意对象类型,包括含可选键的类型。
  2. 返回值通过映射类型遍历T的所有键(包括可选键),对每个键K生成对应的KeyValue<K, Exclude<T[K], undefined>>:
    • Exclude<T[K], undefined>是为了剔除可选键自带的undefined类型,因为实际运行时只有存在的键会被转换为KeyValue元素。
  3. 最后通过[keyof T]将映射类型转换为联合类型,再包裹成数组,这样返回的数组元素会是所有键对应的KeyValue类型的联合,符合实际运行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:21