如何从字符串数组生成对象类型作为TypeScript函数返回类型?
实现根据所选键返回子集对象类型的TypeScript函数
可以实现这个需求,核心是利用TypeScript的泛型约束和内置Pick工具类型,同时确保传入的键数组被识别为具体的字面量类型,具体实现如下:
type MyType = { x: number; y: string; z: number; }; // 泛型函数:K 约束为 MyType 的键子集,返回对应键的对象类型 const someFunc = <K extends keyof MyType>(select: readonly K[]): Pick<MyType, K> => { // 模拟从完整对象中提取目标键的逻辑 const fullObject: MyType = { x: 1, y: "example", z: 3 }; return Object.fromEntries( select.map(key => [key, fullObject[key]]) ) as Pick<MyType, K>; }; // 调用示例:返回类型自动推导为 { x: number; y: string } const selectedObj = someFunc(['x', 'y']); // 此时 selectedObj.x 为 number 类型,selectedObj.y 为 string 类型,selectedObj.z 不存在类型提示
关键说明
- 泛型
K extends keyof MyType:让TypeScript精准捕获传入的具体键集合,而非宽泛的keyof MyType类型 readonly K[]参数:确保数组元素被推断为具体的键字面量,无需额外添加as const断言(若传入动态生成的数组,需用as const锁定类型,比如const keys = ['x','y'] as const; someFunc(keys))Pick<MyType, K>返回类型:TypeScript内置工具类型,直接从MyType中挑选出K对应的键值对组成新类型
内容的提问来源于stack exchange,提问作者TheWhiteFang
相关产品推荐
相关产品推荐

