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

如何在TypeScript中实现两个参数值不同的类型检查?

实现函数参数c1和c2的不同值类型检查

原代码的错误在于Exclude<Country, c2>的用法——这里的c2是对象属性名,并非类型,无法直接用于类型排除。要实现强制c1和c2值不同的类型检查,可以通过泛型捕获参数类型的方式来实现:

type Country = "usa" | "uk" | "canada";

// 用泛型T绑定c1的具体类型,c2的类型为排除T后的Country子类型
function match<T extends Country>({ c1, c2 }: { c1: T; c2: Exclude<Country, T> }) {}

match({ c1: 'usa', c2: 'usa' }); // 触发类型错误,符合预期
match({ c1: 'uk', c2: 'usa' }); // 类型校验通过,符合预期

原理说明:

  • 泛型T会在函数调用时自动推断出c1的具体类型(比如传入'usa'时,T就是"usa")。
  • Exclude<Country, T>会从Country联合类型中剔除T对应的类型,确保c2只能是和c1不同的国家值。

另外注意:原代码中调用match时直接传两个字符串是错误的,因为函数定义接收的是一个包含c1和c2属性的对象,所以调用时要以对象形式传参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:20:30