<!-- Thank you for contributing to TypeScript! Please review this checklist before submitting your issue. [ ] Many common issues and suggestions are addressed in the FAQ https://github.com/Microsoft/TypeScript/wiki/FAQ [ ] Search for duplicates before logging new issues https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&q=is%3Aissue [ ] Questions are best asked and answered at Stack Overflow http://stackoverflow.com/questions/tagged/typescript For bug reports, please include the information below. __________________________________________________________ --> **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 ``` ts class Foo { @contract test (a : integer, b : string) : boolean { return true } @contract testOptional (a : integer, b? : string) : boolean { return true } @contract testDefault (a : integer, b : string = 'hello') : boolean { return true } } ``` The above generated the following Javascript. ``` js var Foo = (function () { function Foo() { } Foo.prototype.test = function (a, b) { return true; }; Foo.prototype.testOptional = function (a, b) { return true; }; Foo.prototype.testDefault = function (a, b) { if (b === void 0) { b = 'hello'; } return true; }; __decorate([ contract, __metadata('design:type', Function), __metadata('design:paramtypes', [integer, String]), __metadata('design:returntype', Boolean) ], Foo.prototype, "test", null); __decorate([ contract, __metadata('design:type', Function), __metadata('design:paramtypes', [integer, String]), // same as above __metadata('design:returntype', Boolean) ], Foo.prototype, "testOptional", null); __decorate([ contract, __metadata('design:type', Function), __metadata('design:paramtypes', [integer, String]), // same as above __metadata('design:returntype', Boolean) ], Foo.prototype, "testDefault", null); return Foo; }()); ``` Note that the three different ts functions generated the exact sets of `__metadata` calls. The `design: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.