-
Notifications
You must be signed in to change notification settings - Fork 12.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Runtime parameter info (name, optional, default) #8126
Comments
Also, it looks like the types provided for For example, a union type of @contract
testUnion(a : integer | string) : string {
return 'hello';
} ==> __decorate([
contract,
__metadata('design:type', Function),
__metadata('design:paramtypes', [Object]), // integer | string
__metadata('design:returntype', String)
], Foo.prototype, "testUnion", null); And rest parameter just returns the type for the first position of the rest parameter, i.e. @contract
testRest(a : integer, ...rest : string[]) : string {
return 'hello';
} ==> __decorate([
contract,
__metadata('design:type', Function),
__metadata('design:paramtypes', [integer, String]), // string[] ==> String
__metadata('design:returntype', String)
], Foo.prototype, "testRest", null); |
The metadata provided are not meant to be a reflective runtime type system. you can find more discussion about this in #3060. |
As for the optionality i think this fits into this model. we will have add a new key for the property. one thing to note, the decorator proposal for TC39 is undergoing some changes. we will not be taking on any decorator features until that stabilizes. |
👍 for including the optionality is the metadata information. Here is my use case for it: I am building a configuration library that reads from several sources (environment variables, AWS SSM, etc). I use the decorators to identify how to fetch the attribute. e.g.: class Config {
@Env DB_PASSWORD!: string
} The |
Currently have the same use case and need to see if a decorated class attribute is optional or not. |
TypeScript Version:
1.8.9
Code
I'm trying to leverage decorators to create runtime contracts to check against incoming parameters.
Below is the ts code
The above generated the following Javascript.
Note that the three different ts functions generated the exact sets of
__metadata
calls. Thedesign:paramtypes
alone cannot distinguish whether a particular parameter is optional or has default values, and thus insufficient for building a runtime contract.It would be great for TypeScript to support a full parameter info so decorators can be made more capable.
The text was updated successfully, but these errors were encountered: