Typescript: Mecanografiado emite incorrectamente el tipo de metadatos 'Objeto' en lugar de 'Cadena' para los tipos de literal de cadena

Creado en 9 sept. 2016  ·  1Comentario  ·  Fuente: microsoft/TypeScript

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.

Bug Fixed

Comentario más útil

Deberíamos hacer esto para todos los tipos literales, incluidos boolean, enum, number y string.

>Todos los comentarios

Deberíamos hacer esto para todos los tipos literales, incluidos boolean, enum, number y string.

¿Fue útil esta página
0 / 5 - 0 calificaciones