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

如何将TypeScript函数参数类型设置为某类型的属性key?是否可行?

第一个问题:限定函数参数仅接受指定类型的属性key

该需求完全可以实现,使用TypeScript内置的keyof操作符即可。keyof T会返回类型T所有属性名组成的联合类型,直接把它作为参数类型就能满足约束。

修正后的示例代码如下:

type A = {
    prop1: string;
    prop2: boolean;
}
// arg的类型自动推导为 'prop1' | 'prop2'
const example = (arg: keyof A ) => {}

// 效果验证
example('prop1') // 类型合法
example('prop2') // 类型合法
example('prop3') // 类型校验报错,不存在该属性

第二个问题:声明类似enum逻辑的对象类型

有两种常用实现方案,可根据场景选择:

方案1:直接使用enum(你给出的示例本身就是合法可用的)

TypeScript原生支持将enum成员作为对象的键类型,你写的代码可以直接运行:

enum Enum {
    bold = 'bold',
    italic = 'italic',
}
const objWithEnumProperties: {[key in Enum]: any} = {
    [Enum.bold]: '',
    [Enum.italic]: ''
}

该方案的特点是enum会被编译为实际存在的JavaScript对象,适合运行时需要用到枚举取值的场景。

方案2:使用字面量联合类型+Record工具类型

如果你只需要做类型约束,不需要运行时的枚举实体,可以用更轻量的方案,不会产生额外的JS代码:

// 定义键的字面量联合类型
type FontStyle = 'bold' | 'italic'
// Record<键类型, 值类型>是TS内置快捷工具类型,等价于 {[key in FontStyle]: any}
const objWithUnionProperties: Record<FontStyle, any> = {
    bold: '',
    italic: ''
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:09:00