Version TypeScript: 2.0.2.0 bêta
Code
function PropDeco(target: Object, propKey: string | symbol) { }
class Foo {
<strong i="9">@PropDeco</strong>
public foo: "foo" | "bar";
}
--experimentalDecorators --emitDecoratorMetadata
Comportement prévisible:
Puisque le type d'exécution de Foo.foo
est String
, je pense que le compilateur devrait émettre la définition de métadonnées suivante:
__metadata('design:type', String)
Code complet:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', String)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Comportement réel:
Cependant, au lieu de String
, le compilateur émet Object
comme type détecté de Foo.foo
:
__metadata('design:type', Object)
Code complet:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', Object)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Je pense que c'est incorrect.
Nous devrions faire cela pour tous les types littéraux, y compris boolean, enum, number et string.
Commentaire le plus utile
Nous devrions faire cela pour tous les types littéraux, y compris boolean, enum, number et string.