Я хочу, чтобы возвращаемый тип моего метода был одним из свойств моего класса (динамически), как я могу это сделать?
Что-то вроде этого:
interface IObject {
[key: string]: any
}
class classX<T extends IObject> {
public methodX(column: keyof T) {
return (null as any) as T[`${column}`] // T['property']
}
}
const varX = new classX<{ property: string }>()
varX.methodX('property') // expected type string
const varY = new classX<{ property: number }>()
varY.methodX('property') // expected type number
Просто добавьте универсальное ограничение к вашему методу и используйте его для ограничения как вашего параметра, так и возвращаемого типа:
interface IObject {
[key: string]: any
}
class classX<T extends IObject> {
public methodX<K extends keyof T>(column: K): T[K] {
return (null as any) as T[K];
}
}
const varX = new classX<{ property: string }>();
varX.methodX('property');
const varY = new classX<{ property: number }>();
varY.methodX('property');