Typescript: Typescript gibt fälschlicherweise den Metadatentyp 'Object' anstelle von 'String' für String-Literal-Typen aus

Erstellt am 9. Sept. 2016  ·  1Kommentar  ·  Quelle: microsoft/TypeScript

TypeScript Version: 2.0.2.0 Beta

Code

function PropDeco(target: Object, propKey: string | symbol) { }

class Foo {
    <strong i="9">@PropDeco</strong>
    public foo: "foo" | "bar";
}
--experimentalDecorators  --emitDecoratorMetadata

Erwartetes Verhalten:

Da der Laufzeittyp von Foo.foo String , sollte der Compiler meiner Meinung nach die folgende Metadatendefinition ausgeben:

__metadata('design:type', String)

Vollständiger Code:

function PropDeco(target, propKey) { }
var Foo = (function () {
    function Foo() {
    }
    __decorate([
        PropDeco, 
        __metadata('design:type', String)
    ], Foo.prototype, "foo", void 0);
    return Foo;
}());

Tatsächliches Verhalten:

Anstelle von String gibt der Compiler jedoch Object als erkannten Typ von Foo.foo :

__metadata('design:type', Object)

Vollständiger Code:

function PropDeco(target, propKey) { }
var Foo = (function () {
    function Foo() {
    }
    __decorate([
        PropDeco, 
        __metadata('design:type', Object)
    ], Foo.prototype, "foo", void 0);
    return Foo;
}());

Ich glaube das ist falsch.

Bug Fixed

Hilfreichster Kommentar

Wir sollten dies für alle Literaltypen tun, einschließlich Boolescher Wert, Aufzählung, Zahl und Zeichenfolge.

>Alle Kommentare

Wir sollten dies für alle Literaltypen tun, einschließlich Boolescher Wert, Aufzählung, Zahl und Zeichenfolge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen