2017-06-01 17 views
0

私はWebアプリケーションにAureliaとTypeScriptを使用しています。 次のようにuser_checking関数を作成して、ユーザーと状態を確認しました。TypeScriptで戻り値の型を持つ関数を作成するには?

user_checking(registerdata, tested_users) { 
    return registerdata.userid && typeof tested_users[registerdata.userid] == 'undefined'; 
} 

この関数には2つのパラメータと戻り値の型があります。私はそこにどんな種類のエラーも見ません。しかし、私がアプリケーションを実行すると、私は次のエラーになります。

error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. [07:46:58] gulp-notify: [Error running Gulp] Error:

誰でもこの機能のエラーを教えてください。

+1

? – Li357

+0

@AndrewLiはあなたが私はそれを行うことができる方法を教えてくださいすることができメソッドの戻り値の型( 'number')を宣言する必要があり –

+0

'user_checking(registerdata、tested_users):number {...}' – Li357

答えて

0

実際には、コメントでも述べたように、コードスニペットはTypeScript v2.3.xでコンパイルするとうまく動作します。

まず、TypeScriptのバージョンをtsc --vで確認し、必要に応じて更新したい場合があります。

私はあなたが言及し、期待どおりに動作することをテストしましたsnippet from GitLabを撮影しました。下の2つの基本的な例は、「真」と「偽」の両方を手配して返す:レコードの

/** 
* Example that arranges the function to return 'true' 
*/ 
public exampleTrue(): boolean { 
    let registerdata = { userid: 1001 }; 
    let tested_users = []; 

    return this.register.user_checking(registerdata, tested_users); 
} 

/** 
* Example that arranges the function to return 'false' 
*/ 
public exampleFalse(): boolean { 
    let registerdata = { userid: 1001 }; 
    let tested_users = []; 

    this.tested_users[registerdata.userid] = 'foo'; 

    return this.register.user_checking(registerdata, this.tested_users); 
} 

を、ここで任意の変更せずに、あなたのクラス次のとおりです。

追記私として
import {autoinject} from 'aurelia-framework'; 
import {HttpClient, json} from 'aurelia-fetch-client'; 

@autoinject 
export class Register { 
    heading:string = 'sTeam register'; 

    registerdata = {}; 
    passwordmatch = true; 
    tested_users = {}; //in coffee this is 'tested_users = {}' 

    /** 
    * CoffeeScript(AngularJS based) code as follows. 
    * ------------------------------ 
    * S.tested_users =() -> 
    *  tested_users 
    * ------------------------------ 
    * @param tested_users 
    * @returns {any} 
    */ 
    tested_users_check(tested_users) { 
    return tested_users; 
    } 

    /** 
    * CoffeeScript(AngularJS based) code as follows. 
    * ------------------------------ 
    * S.user_checking = -> 
    *  S.registerdata.userid and typeof tested_users[S.registerdata.userid] == 'undefined' 
    * ------------------------------ 
    * @param registerdata 
    * @param tested_users 
    * @returns {number} 
    */ 
    user_checking(registerdata, tested_users) { 
    return registerdata.userid && typeof tested_users[registerdata.userid] == 'undefined'; 
    } 

    /** 
    * CoffeeScript(AngularJS based) code as follows. 
    * ------------------------------ 
    * S.user_available = -> 
    *  typeof tested_users[S.registerdata.userid] != 'undefined' and !tested_users[S.registerdata.userid] 
    * ------------------------------ 
    * @param registerdata 
    * @param tested_users 
    */ 
    user_available(registerdata, tested_users) { 
    typeof tested_users[registerdata.userid] != 'undefined' && !tested_users[registerdata.userid]; 
    } 

    /** 
    * CoffeeScript(AngularJS based) code as follows. 
    * ------------------------------ 
    * S.user_taken = -> 
    *  typeof tested_users[S.registerdata.userid] != 'undefined' and tested_users[S.registerdata.userid] 
    * ------------------------------ 
    * @param registerdata 
    * @param tested_users 
    */ 
    user_taken(registerdata, tested_users) { 
    typeof tested_users[registerdata.userid] != 'undefined' && tested_users[registerdata.userid]; 
    } 

    /** 
    * CoffeeScript(AngularJS based) code as follows. 
    * ------------------------------ 
    * S.register = -> 
    *  S.registerdata.group = 'techgrind' 
    *  steam.post('register', S.registerdata).then(handle_request) 
    * ------------------------------ 
    * @param registerdata 
    */ 
    register(registerdata) { 
    registerdata.group = 'kaishr'; 
    // Have to implement the steam post method call. 
    } 

} 

TypeScriptの強力な型付けを利用することが重要なことを指摘したいと考えています。あなたのクラスはほとんどすべての制約や型宣言を使用しません。あなたがあなたの前に、コンパイル時の安全性をチェックを最大限に活用するために、もう少しあなたの操作をリファクタリングすることができる場所にこれにより

// define a strong-typed array, constrained to numbers 
    // (assuming userid is a number) 
    tested_users: Array<number> = []; 

    // define the class 'RegisterData' 
    // forcing it to have a userid of type number 
    export class RegisterData { 
    public userid: number; 
    } 

:しかし、おそらく、出発点として、次のようないくつかのマイナーな調整を感謝かもしれませんアプリケーションを実行することさえできます。そうですね:

public user_checking(registerdata: RegisterData, tested_users: Array<number>): boolean { 
    return registerdata.userid && typeof tested_users[registerdata.userid] == 'undefined'; 
    } 

一見したところでは、儀式で多くのオーバーヘッドのように見えるかもしれませんが、圧倒されません。唯一のいくつかのタイプを追加することで、あなたは次のことをやった:

boolean
  • は強い型付けRegisterDataクラス
  • userid
  • ためのあらゆる可能なタイプの不一致が入力を制約全廃返すために、あなたの関数を強制
    • パラメータを強力な型に変更する

    最後に、これにより、プログラムを実行する前にコンパイラがより良い情報を提供できるようになります。これが助けた

    希望...

    あなたは
  • 関連する問題