Is there a way to get/use the actual property name in an Typescript type definition.
type Mapped = {
[P:string]: P;
}
Where Mapped["foo"] is of type "foo" and Mapped["bar"] is of type "bar", not string.
I tried different variations on [P:string], [P in keyof any], typeof P, readonly and as const or type Mapped<Props extends keyof any> = { [P in Props]: P } and everything I came up with along these lines, but P is at best typed as string, never as the actual property name.
What do I need this for?
To build upon. Typing Proxies that dynamically generate utility functions using the accessed property name.
Something like
type GetProperty = {
[P in (keyof any)]: <T>(obj:T) => P extends keyof T ? T[P] : void;
}
My issue is, that since the generated/returned values are dynamic, I don't have a type T to keyof T the names from.
Could you please provide an example of expected bahaviour?
var obj:Mapped = new Proxy(...);
// where the properties of `obj` should be typed as
var foo:"foo" = obj.foo;
var bar:"bar" = obj.bar;
And obj.asdf1234 should be of type "asdf1234"