2017-06-01 59 views
0

我爲我的web應用程序使用Aurelia和TypeScript。 我創建了以下'user_checking'函數來檢查用戶和狀態,如下所示。如何在TypeScript中使用返回類型創建函數?

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

該函數有兩個參數,也是一個返回類型。我沒有看到任何一種錯誤。但是當我運行該應用程序時,出現以下錯誤。

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進行編譯時,您的代碼片段可以正常工作。

您可能首先需要通過tsc --v來檢查TypeScript版本,並根據需要進行更新。

我已經採取了你提到的snippet from GitLab,並測試它是否按預期工作。下面的兩個基本的例子安排並同時返回「真」與「假」:

/** 
* 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
  • 約束輸入參數到強類型

最終,這將使您的編譯器在您運行程序之前幫助您提供更好的信息。

希望這有助於...

相關問題