Версия TypeScript: 2.0.2.0 бета
Код
function PropDeco(target: Object, propKey: string | symbol) { }
class Foo {
<strong i="9">@PropDeco</strong>
public foo: "foo" | "bar";
}
--experimentalDecorators --emitDecoratorMetadata
Ожидаемое поведение:
Поскольку тип среды выполнения Foo.foo
равен String
, я считаю, что компилятор должен выдать следующее определение метаданных:
__metadata('design:type', String)
Полный код:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', String)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Фактическое поведение:
Однако вместо String
компилятор выдает Object
в качестве обнаруженного типа Foo.foo
:
__metadata('design:type', Object)
Полный код:
function PropDeco(target, propKey) { }
var Foo = (function () {
function Foo() {
}
__decorate([
PropDeco,
__metadata('design:type', Object)
], Foo.prototype, "foo", void 0);
return Foo;
}());
Я считаю, что это неверно.
Мы должны сделать это для всех типов литералов, включая логические, перечисления, числа и строки.
Самый полезный комментарий
Мы должны сделать это для всех типов литералов, включая логические, перечисления, числа и строки.