TypeScript如何动态获取类属性类型 实现函数按入参返回精确类型
解决方案
可以通过泛型结合TypeScript索引类型特性实现精确类型推导,具体修改步骤如下:
第一步:导出Tables类型
在db.ts文件中为Tables接口添加导出声明,方便外部使用该类型定义:
// db.ts 调整部分 export interface Tables { [Databases.db1]: SomeType1; [Databases.db2]: SomeType2; }
第二步:改写useDB为泛型函数
通过泛型约束入参类型,同时绑定返回值与入参的对应关系:
import MyInstance, { Databases, Tables } from './db'; // 泛型T约束为Databases枚举的子集,返回值对应Tables的索引类型 export const useDB = <T extends Databases>(table: T): Tables[T] => { const currentTable = MyInstance.tables[table]; return currentTable; };
效果验证
调用时会自动根据传入的枚举值推导对应返回类型:
const db1Table = useDB(Databases.db1) // db1Table 类型自动推导为 SomeType1,可直接安全访问 id1、data1 属性 const db2Table = useDB(Databases.db2) // db2Table 类型自动推导为 SomeType2,可直接安全访问 id2、data2 属性
内容的提问来源于stack exchange,提问作者Vasyl Butov
相关产品推荐
相关产品推荐

