2016-04-09 7 views
4

TypeScriptとデコレータでプロパティを定義する方法は?例えばTypeScriptクラスデコレータ - クラスメソッドを追加

私は、このクラスのデコレータがあります

function Entity<TFunction extends Function>(target: TFunction): TFunction { 
    Object.defineProperty(target.prototype, 'test', { 
     value: function() { 
      console.log('test call'); 
      return 'test result'; 
     } 
    }); 
    return target; 
} 

そして、それを使用します。このコードは正常に働いていた

test call   entity.ts:5 
test result   entity.ts:18 

が、TSC:

@Entity 
class Project { 
    // 
} 

let project = new Project(); 
console.log(project.test()); 

を私はこのコンソールログを持っています返品エラー:

entity.ts(18,21): error TS2339: Property 'test' does not exist on type 'Project'. 

このエラーを解決するにはどうすればよいですか?

答えて

3

Afこれまで私が知っている限り、これは不可能です。この問題に関するディスカッションはissueです。

デコレータを使用してクラスを拡張するのではなく、適切な場合は、宣言のマージングを使用して型宣言を拡張することもできます。または、タイプアサーションを使用します(ただし、タイプチェックは失われます)。(<any>project).test()

+0

ありがとう!これができないのはあまりにも悪い –

関連する問題