TypeScript如何根据petType参数动态计算getPets函数的返回类型
实现方案
你可以通过 TypeScript 泛型捕获 petType 的字面量类型,实现动态关联参数和返回值的键名,修改后的代码如下:
// 先定义通用的返回类型,方便复用 type GetPetsResult<T extends string> = { [K in T]: any[] } & { totalFound: number } class YourClass { // 泛型T用来捕获传入petType的具体字面量类型 static async getPets<T extends string>({ petType, inverseOrder }: { petType: T; inverseOrder?: boolean }): Promise<GetPetsResult<T>> { const [petsFound, totalFound] = await getPetsByType(petType, inverseOrder); // 这里需要加类型断言,因为TS默认无法自动推断动态键对象的精确类型 return { [petType]: petsFound, totalFound } as GetPetsResult<T>; } }
效果说明
- 调用
getPets({ petType: 'dogs' })时,返回类型会自动推导为{ dogs: any[]; totalFound: number } - 调用
getPets({ petType: 'cats' })时,返回类型会自动推导为{ cats: any[]; totalFound: number } - 后续访问返回值时,如果访问和传入
petType不匹配的键,TS会直接抛出类型错误,完全解决原有索引类型无法校验的问题。
内容的提问来源于stack exchange,提问作者agusting
相关产品推荐
相关产品推荐

