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

TypeScript如何将函数参数类型限制为指定对象的属性取值

TypeScript 限制函数参数为指定对象属性值的实现方法

步骤1:固定input对象的字面量类型

首先需要给input对象添加as const断言,避免TypeScript将内部的字符串属性值自动拓宽为通用string类型,导致后续类型约束失效:

export const input = {
    a: {
        ROLE_a: 'xxx'
    },
    b: {
        ROLE_b: 'xxx'
    },
    c: {
        ROLE_c: 'xxx'
    }
} as const;

步骤2:提取允许的参数值类型

从input的类型中提取所有二级属性的值,组成联合类型作为参数的合法类型:

// 提取input所有一级键的联合:'a'|'b'|'c'
type InputRootKey = keyof typeof input;
// 提取所有二级属性的值的联合,就是我们需要的合法参数类型
type AllowedParam = typeof input[InputRootKey][keyof typeof input[InputRootKey]];

步骤3:给函数参数添加类型约束

直接将上面定义的AllowedParam作为参数类型即可:

export const doSomething = (param: AllowedParam) => {};

// 测试效果
doSomething("dwdew"); // 类型报错:字符串"dwdew"不属于AllowedParam联合类型
doSomething(input.a.ROLE_a) // 类型校验通过

补充说明

如果你的业务场景中各个二级ROLE的值是不同的,该约束会自动识别所有合法值;如果所有ROLE值都相同,那么参数会被限制为只能传入该固定值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:24:08