将RequireJS与导出的类一起使用时函数结果未定义

时间:2018-08-06 17:21:49

标签: javascript typescript requirejs

我正在使用Typescript,Require和AMD模块。当我调用此函数时,它返回未定义。如果我将这些值记录到函数中,它们将全部正确返回。

如果我不使用require([在导出的类中,它将无法编译。

从common.ts文件中导出的类。

export class DateHelpers {
    CheckMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
        requirejs(["moment", "alertify"], function (moment, alertify) {
            moment.locale('en');
            var momToDate = moment(toDate, "MM/DD/YYYY");
            var momFromDate = moment(fromDate, "MM/DD/YYYY");

            var dateDiff = momToDate.diff(momFromDate, 'days');

            if (dateDiff < 0) {
                alertify.alert("From Date must be before To Date.");
                return false;
            }

            else if (dateDiff > numberOfDays) {
                alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
                return false;
            }

            else {
                return true;
            }
        });
    }
}

调用函数

import * as common from "../../Common/Common.js"
let dateHelpers = new common.CheckMaxDateRange();
dateHelpers.CheckMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)

我在哪里错了?我以前使用过的所有导出函数都不需要任何依赖关系。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为导出不是问题,因为您可以将类导出为:

export class X {...}
export class Y {...}

class X {...}
class Y {...}
export { X, Y }

我认为问题可能在于您如何导入导出的类:

import { DateHelpers} from "./path_to_class/DateHelpers";
let dateHelpers = new DateHelpers();

在调用该方法之前,检查您的dateHelpers变量是否未定义。 它将帮助您找出问题所在。

如果这有帮助,请让我发布,以便我提供进一步的帮助。

答案 1 :(得分:1)

请勿将require与ES6模块语法一起使用。您应该import模块的依赖性,并配置编译器/捆绑器以支持外部脚本的加载(如果要使用require.js库,可以通过发出AMD语法模块)。

此外,您不应该使用没有状态并且只有一个方法的class。写

import * as moment from "moment";
import * as alertify from "alertify";

export function checkMaxDateRange(fromDate: string, toDate: string, numberOfDays: Number) {
    moment.locale('en');
    var momToDate = moment(toDate, "MM/DD/YYYY");
    var momFromDate = moment(fromDate, "MM/DD/YYYY");

    var dateDiff = momToDate.diff(momFromDate, 'days');

    if (dateDiff < 0) {
        alertify.alert("From Date must be before To Date.");
        return false;
    }

    else if (dateDiff > numberOfDays) {
        alertify.alert("Date range cannot be greater than " + numberOfDays + " days.");
        return false;
    }

    else {
        return true;
    }
}

import * as common from "../../Common/Common.js";

common.checkMaxDateRange($('#StartDate').val(), $('#EndDate').val(), 365)