2021年2月6日星期六

Using property name in typescript declaration

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"

https://stackoverflow.com/questions/66077215/using-property-name-in-typescript-declaration February 06, 2021 at 09:02PM

没有评论:

发表评论