實際上,正如評論中提到的,當使用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
- 約束輸入參數到強類型
最終,這將使您的編譯器在您運行程序之前幫助您提供更好的信息。
希望這有助於...
您必須爲方法 – Li357
@AndrewLi能否請你告訴我,我怎麼能做到這一點聲明返回類型('number')? –
'user_checking(registerdata,tested_users):number {...}' – Li357