实际上,正如 cmets 中所提到的,您的代码 sn-p 在使用 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 的任何可能的类型不匹配
- 将输入参数限制为强类型
最后,这将允许您的编译器在您运行程序之前帮助您提供更好的信息。
希望这会有所帮助...