microsoft / microsoft/TypeScript
Runtime parameter info (name, optional, default)
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
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
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.
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par l’émission des métadonnées de décorateur montrée dans le JavaScript généré, en particulier les appels à design:paramtypes et __metadata. Comparez les métadonnées produites pour test, testOptional et testDefault. Le travail est terminé lorsque les décorateurs à l’exécution peuvent distinguer les noms des paramètres, les paramètres optionnels et les valeurs par défaut, et que le comportement pertinent est couvert par des tests.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100