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

如何在TypeScript中定义依赖变量类型?解决关联类型匹配错误

在TypeScript中定义依赖变量类型的解决方案

你遇到的问题是TypeScript无法自动关联mode和onChange参数的类型,因为泛型接口的条件类型在函数内部无法被正确窄化。可以通过定义联合类型来解决这个问题,让每个mode值对应明确的onChange参数类型:

正确实现代码

type FnParams = 
  | { mode: 'a'; onChange: (value: string) => void }
  | { mode: 'b'; onChange: (value: number) => void };

const fn = ({ mode, onChange }: FnParams) => {
  if (mode === 'a') {
    onChange('string'); // 类型检查通过
  }
  if (mode === 'b') {
    onChange(123); // 类型检查通过
  }
};

fn({
  mode: 'b',
  onChange: value => value // value自动推断为number类型
});

原实现出错原因

之前的泛型接口写法中,FnParams<T>是单一泛型类型,未指定泛型参数时默认是FnParams<'a'>,所以传入mode: 'b'会直接报错。即使指定了泛型参数,函数内部TypeScript也无法根据mode的取值窄化onChange的参数类型——因为泛型参数是一个整体,不是联合类型的独立成员。

改用联合类型后,TypeScript可以通过mode的取值自动窄化当前对象的类型,从而正确匹配onChange的参数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:05:46