2017-03-28 17 views
1

typescriptを使用してクラス内に関数を書き込もうとしました。TypeScript予期しないトークン、コンストラクタ、メソッド、アクセサまたはプロパティが予期されました

class Test 
{ 
    function add(x: number, y: number): number { 
     return x + y; 
    } 
} 

これは、次のエラーが発生:

TypeScript Unexpected token, A constructor, method, accessor or property was expected.

Iから例をコピー:https://www.typescriptlang.org/docs/handbook/functions.html

私は何かが足りないのですか?よくわかりません!

+0

あなたはクラスの真ん中に機能上のセクションから例をコピーしました。メソッドを定義する方法については、JS/TSクラスに関するドキュメント、チュートリアル、またはブログ記事をご覧ください。 –

+0

この 'function'キーワードは間違っています。メソッドを定義するためにクラス内で使用することはできません。ただそれを削除すると、このコードは問題ありません。 – Diullei

答えて

6

Typescriptクラス定義でfunctionキーワードを使用しないでください。代わりにこれを試してみてください:

class Test { 
    add(x: number, y: number): number { 
     return x + y; 
    } 
} 
1

活字体は、クラスのメンバーとしてfunction宣言を許可していません。そのため、わずかに異なる構文を持っている...

class Test 
{ 
    // This will bind the add method to Test.prototype 
    add(x: number, y: number): number 
    { 
     return x + y; 
    } 

    // This will create a closure based method within the Test class 
    add2 = (x: number, y: number) => { 
     return x + y; 
    } 
} 
+0

「クロージャベースの方法」とは何ですか? –

+0

@torazaburoメソッドがプロトタイプにバインドされている場合、そのメソッドのインスタンスは1つしか作成されず、呼び出し側のインスタンスによってコンテキストで実行されます。クロージャを使用する場合、メソッドはインスタンスごとに作成され、コンストラクタ関数内に囲まれます。クロージャベースのメソッドは、実行範囲外のプライベートインスタンスメンバにアクセスできるという利点がありますが、プロトタイプにバインドされたメソッドでは不可能ですが、プロトタイプにバインドされたメソッドはパフォーマンスが向上する傾向があります。 – series0ne

+0

"closure-based method"という用語のリファレンスを提供してください。 –

関連する問題