Typescript: Typescriptは、文字列リテラルタイプのメタデータタイプ「String」ではなく「Object」を誤って出力します

作成日 2016年09月09日  ·  1コメント  ·  ソース: microsoft/TypeScript

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型としてObjectFoo.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;
}());

これは間違っていると思います。

Bug Fixed

最も参考になるコメント

これは、ブール値、列挙型、数値、文字列を含むすべてのリテラル型に対して行う必要があります。

>すべてのコメント

これは、ブール値、列挙型、数値、文字列を含むすべてのリテラル型に対して行う必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価