如何使用TypeScript处理异常消息?

时间:2014-07-29 10:15:16

标签: javascript typescript

我的代码看起来像这样:

class UserService implements IUserService {

    data: IUserServiceData = {
        expirationDate: null,
        isAuthenticated: false,
    };

    static $inject = [];

    constructor () {}

    isAuthenticated = () => {
        if (this.data.isAuthenticated && !this.isAuthenticationExpired(this.data.expirationDate)) {
            return true;
        } else {
            try {
                this.retrieveSavedData();
            } catch (e) {
                return false;
                // throw new NoAuthenticationException('Authentication not found');
            }
            return true;
        }
    };

    // Original Javascript code here
    //function AuthenticationRetrievalException(message) {
    //    this.name = 'AuthenticationRetrieval';
    //   this.message = message;
    //}

    AuthenticationRetrievalException = (message) => {
        this.name = 'AuthenticationRetrieval';
        this.message = message;
    }

    retrieveSavedData = () => {
        var savedData = this.utilityService.userCache.get('data');
        if (typeof savedData === 'undefined') {
            throw new AuthenticationRetrievalException('No authentication data exists');
        } else if (isAuthenticationExpired(savedData.expirationDate)) {
            throw new AuthenticationExpiredException('Authentication token has already expired');
        } else {
            this.data = savedData;
            this.setHttpAuthHeader();
        }
    }


} 

我应该怎么做呢。在我开始尝试转换它之前,我的JavaScript源代码中的引用?

我不知道如何在Typescript中编写这部分代码:

    AuthenticationRetrievalException = (message) => {
        this.name = 'AuthenticationRetrieval';
        this.message = message;
    }

2 个答案:

答案 0 :(得分:2)

我强烈建议您不要在JavaScript(或TypeScript)中创建自己的错误类,只使用Error(参考:How do I create a custom Error in JavaScript?

但是你可以在TypeScript中做到这一点。在文件的根级别(不在您的班级中):

function AuthenticationRetrievalError (message) {
    this.name = "AuthenticationRetrievalError";
    this.message = (message || "");
}
AuthenticationRetrievalError.prototype = Error.prototype;

然后从你的班级内部开始:

throw new AuthenticationRetrievalError('foo');

答案 1 :(得分:1)

如果我理解你并希望在自定义消息中引发错误,则可以使用类Error

throw new Error("Authentication not found");

但我不确定这是否是你想要做的。