2016-01-15 12 views
6

デコレータとターゲットES5を使用するタイプスクリプトで既存のコードベースを使用するシナリオがありますが、ES3が必要なIE6をサポートする必要があります。ES3出力のTypescript ES7ディスクリプタ?

は今によると:

error TS1241: Unable to resolve signature of method decorator when called as an expression. Supplied parameters do not match any signature of call target.

私は0、エラーを取得し、すべてがES5で動作:I出力はES3をターゲットにする場合 https://github.com/Microsoft/TypeScript/issues/4681

私が手ES3がサポートする必要があると思われるが、 ES3で動作させるために何かをする必要がありますか、それともサポートされていないのですか?ここで

は、問題の雲9例です。

https://ide.c9.io/grofit/knockout-decorators-es3-example

あなたはそれが動作しますES5するのTSconfigターゲットを変更した場合だけ、コマンドラインでgulpを実行します。

+1

あなたがコードを提供することができますか?あなたは 'tsc script.ts -t ES3'を試しましたか? –

+0

もちろん、私はes3ターゲットでtsconfigとgulp typescriptを使用しています。問題を示すクラウド版へのリンクを追加しました。 – Grofit

答えて

7

ES3をターゲットにしているときに、メソッドデコレータが正しくサポートされていないか、まったくサポートされていないようです。残念なことに、あなたが得るエラーメッセージは非常に有用ではありません。エラーメッセージについてのように見えます。また、ES3や完全サポートをターゲットにしているときに、デコレータの部分的なサポートを意図しているかどうかはわかりません。例えば

、あなたはES3をターゲットにする方法デコレータを使用しようとします

エラーTS1241:メソッドデコレータ際の署名を解決することができません

function myMethodDecorator(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>): TypedPropertyDescriptor<any> { 
    // do something 
    return descriptor; 
}; 

class MyClass { 
    @myMethodDecorator 
    myMethod(arg: string) { 
     return "Message -- " + arg; 
    } 
} 

あなたが報告されたエラーメッセージが表示されます式と呼ばれる。 指定されたパラメータは、コールターゲットのシグネチャと一致しません。

しかし、プロパティデスクリプタを適用しようとすると、それをメソッドに適用しているにもかかわらず、コンパイラはそれに不思議なことに間違いなく問題ありません。これは、エラーなしES3をターゲットにコンパイルします。

function myPropertyDecorator(target: Object, propertyKey: string): void { 
    // something 
}; 

class MyClass { 
    @myPropertyDecorator 
    myMethod(arg: string) { 
     return "Message -- " + arg; 
    } 
} 

しかし、あなたがでメソッドのデコレータを使用しているとき、それはES3へのコンパイルに取得することができます。

let myMethodDecorator: any = function(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>): TypedPropertyDescriptor<any> { 
    // do something 
    return descriptor; 
}; 

class MyClass { 
    @myMethodDecorator 
    myMethod(arg: string) { 
     return "Message -- " + arg; 
    } 
} 
+0

鮮やかな答え、私は事務所の外ですので、私が戻ったときに私はあなたに答えを与えるでしょう – Grofit

+0

ありがとう。私はそれがIE6で動作するか調べることに興味があります。生成されたコードを見ると、 'Object.getOwnPropertyDescriptor()'に依存しているようです。可能であれば、その方法をシムにする必要があるかもしれません。 – Seamus

+0

hmmだから私はあなたが示唆するように上記のようにコンパイルすることができます。問題はそれがディスクリプタが定義されていないということですので、es6をターゲットにするとディスクリプタを渡さないので、私の "本当の"世界のシナリオでは、argsをデコレータに渡して内部デコレータをラップします。奇妙なことは、それが出力され、同じコードでうまく動作するES5ターゲットにあるので、出力の何かがオフでなければならない...私はFFで現在テスト中です。両方の出力ターゲットがFFで動作するIE6でのテストだけを計画しています。 – Grofit

関連する問題