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;
}());
实际行为:
但是,编译器将发出Object
作为检测到的Foo.foo
类型,而不是String
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;
}());
我相信这是不正确的。
我们应该对所有文字类型执行此操作,包括布尔,枚举,数字和字符串。
最有用的评论
我们应该对所有文字类型执行此操作,包括布尔,枚举,数字和字符串。