Versión de TypeScript: 2.0.2.0 beta
Código
function PropDeco(target: Object, propKey: string | symbol) { }
class Foo {
<strong i="9">@PropDeco</strong>
public foo: "foo" | "bar";
}
--experimentalDecorators --emitDecoratorMetadata
Comportamiento esperado:
Dado que el tipo de tiempo de ejecución de Foo.foo
es String
, creo que el compilador debería emitir la siguiente definición de metadatos:
__metadata('design:type', String)
Código completo:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', String)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Comportamiento real:
Sin embargo, en lugar de String
, el compilador emite Object
como el tipo detectado de Foo.foo
:
__metadata('design:type', Object)
Código completo:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', Object)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Creo que esto es incorrecto.
Deberíamos hacer esto para todos los tipos literales, incluidos boolean, enum, number y string.
Comentario más útil
Deberíamos hacer esto para todos los tipos literales, incluidos boolean, enum, number y string.