如何在TypeScript中让方法返回类属性的动态类型?
实现方法返回类属性的动态类型
你可以通过给类方法添加泛型参数来精准绑定传入的属性名,让TypeScript自动推导对应属性的类型作为返回值类型,下面是优化后的实现:
interface IObject { [key: string]: any } class ClassX<T extends IObject> { // 泛型K约束为T的属性键,直接用T[K]作为返回类型 public methodX<K extends keyof T>(column: K): T[K] { // 实际业务中如果实例持有对应数据,比如this.data = 传入的T类型数据,可直接返回 this.data[column] // 以下是类型演示用的断言,实际根据业务逻辑替换 return null as unknown as T[K] } } // 测试示例 const varX = new ClassX<{ property: string }>() const resX = varX.methodX('property') // 类型自动推导为 string const varY = new ClassX<{ property: number, username: boolean }>() const resY = varY.methodX('property') // 类型自动推导为 number const resZ = varY.methodX('username') // 类型自动推导为 boolean
关键说明
- 给方法单独声明泛型
K并约束为keyof T,能让TypeScript把传入的属性名推导为字面量类型(比如'property'而非string),从而精准返回T[K]对应的属性类型。 - 如果你的类实例中实际存储了
T类型的数据(比如有一个private data: T成员),直接返回this.data[column]即可,不需要额外的类型断言,TypeScript会自动识别返回类型。
内容的提问来源于stack exchange,提问作者Rizky-Iqbal36
相关产品推荐
相关产品推荐

