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

如何在TypeScript中实现函数两个参数的类型映射?

实现键与对应属性类型匹配的函数

要实现这个需求,你需要用泛型来关联两个参数的类型,让TypeScript能根据第一个参数的键类型,推断出第二个参数的正确类型。

正确实现代码

type SomeType = {
  name: string;
  quantity: number;
};

// 用泛型K约束为SomeType的键类型
const someFunc = <K extends keyof SomeType>(
  key: K,
  value: SomeType[K]
) => {
  // 函数逻辑
};

// 合法调用
someFunc("name", "John");
someFunc("quantity", 10);

// 类型错误(符合预期)
someFunc("name", 10); // 类型“number”的参数不能赋给类型“string”的参数
someFunc("quantity", "John"); // 类型“string”的参数不能赋给类型“number”的参数

为什么之前的写法无效?

你之前的写法里,key: keyof SomeType是所有键的联合类型("name" | "quantity"),value: SomeType[keyof SomeType]是所有属性类型的联合类型(string | number)。这两个参数的类型是独立的,TypeScript只会检查value是否属于联合类型中的某一种,不会关联到具体的key,所以会出现someFunc("name", 10)这种不符合预期的合法情况。

而泛型写法中,泛型K会被推断为当前传入的具体键类型(比如传入"name"时,K就是"name"),value: SomeType[K]就会被精确约束为该键对应的属性类型(string),从而实现键与值类型的精准匹配。

内容的提问来源于stack exchange,提问作者E. Guzman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:25:23