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
代わりに、検出されたFoo.foo
型として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;
}());
これは間違っていると思います。
これは、ブール値、列挙型、数値、文字列を含むすべてのリテラル型に対して行う必要があります。
最も参考になるコメント
これは、ブール値、列挙型、数値、文字列を含むすべてのリテラル型に対して行う必要があります。