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

TypeScript中如何让类参数基于动态数组键值实现类型推断?

基于数组键值实现TypeScript类型推断的解决方案

要让defaultValue自动推断为传入options中value的联合类型并支持补全,你可以通过泛型来实现,具体修改如下:

简化版实现

直接将类定义为泛型类,让TypeScript自动从传入的options中推断出value的具体类型:

class SelectConfig<V extends string> {
  options: { value: V }[];
  defaultValue: V;

  constructor(args: { options: { value: V }[], defaultValue: V }) {
    Object.assign(this, args);
  }
}

实例化效果

当你创建实例时,TypeScript会自动识别options里的value值,将defaultValue的类型约束为这些值的联合类型,同时提供自动补全:

const select = new SelectConfig({
  options: [{ value: 'Hello' }, { value: 'World' }],
  defaultValue: "Hello" // 编辑器会提示可选值:"Hello" | "World",输入其他值会报错
});

保留接口的实现

如果需要保留原有的接口结构,可以把接口也改为泛型:

interface Option<V extends string> {
  value: V;
}

interface SelectArgs<V extends string> {
  options: Option<V>[];
  defaultValue: V;
}

class SelectConfig<V extends string> {
  options: Option<V>[];
  defaultValue: V;

  constructor(args: SelectArgs<V>) {
    Object.assign(this, args);
  }
}

原理说明

泛型参数V会在实例化时自动推断为options数组中所有value值的联合类型(比如上面例子中的'Hello' | 'World'),这样defaultValue的类型就被严格限定为这些值中的一个,既实现了类型安全,又获得了自动补全的能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:50:32