Typescript: Typescript émet incorrectement le type de métadonnées 'Object' au lieu de 'String' pour les types de littéraux de chaîne

Créé le 9 sept. 2016  ·  1Commentaire  ·  Source: microsoft/TypeScript

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.

Bug Fixed

Commentaire le plus utile

Nous devrions faire cela pour tous les types littéraux, y compris boolean, enum, number et string.

>Tous les commentaires

Nous devrions faire cela pour tous les types littéraux, y compris boolean, enum, number et string.

Cette page vous a été utile?
0 / 5 - 0 notes