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.
Wir sollten dies für alle Literaltypen tun, einschließlich Boolescher Wert, Aufzählung, Zahl und Zeichenfolge.
Hilfreichster Kommentar
Wir sollten dies für alle Literaltypen tun, einschließlich Boolescher Wert, Aufzählung, Zahl und Zeichenfolge.