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

TypeScript中如何让函数参数仅接受数组内的元素值?

实现数组元素值的类型约束函数

要实现你需要的功能,核心是让TypeScript推断出数组的字面量元素类型,而非宽泛的string[],再基于这个类型约束函数参数。具体实现如下:

  1. 给数组添加as const断言,让TypeScript将数组类型锁定为包含具体元素的只读字面量数组:

    const myArray = ["foo", "bar"] as const;
    
  2. 定义pick函数时,用typeof myArray[number]获取数组元素的联合类型,作为参数的类型约束:

    function pick(what: typeof myArray[number]) {
      // 这里写函数逻辑
    }
    

此时调用函数的效果完全符合你的需求:

  • pick("foo") 合法,参数属于数组元素的联合类型
  • pick("inexistent") 触发TypeScript类型错误,因为该值不在"foo" | "bar"范围内

补充说明

  • as const断言会将数组转为只读类型(readonly ["foo", "bar"]),如果需要可修改的数组,可以单独提取元素类型后声明:
    type ArrayElement = typeof myArray[number];
    const mutableArray: ArrayElement[] = [...myArray];
    
  • 若不想使用as const,也可以手动定义元素联合类型再声明数组:
    type AllowedValues = "foo" | "bar";
    const myArray: AllowedValues[] = ["foo", "bar"];
    function pick(what: AllowedValues) {}
    

但第一种方式更简洁,无需手动维护联合类型,数组元素变更时类型会自动同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:31:01