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

Function result undefined when using RequireJS with exported class

我正在使用 Typescript、Require 和 AMD 模块。当我调用这个函数时,它 returns 未定义。如果我在函数中记录值,它们都会正确返回。

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

已从 common.ts 文件导出 class。

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)

我哪里错了?我之前使用的所有导出函数都不需要任何依赖项。

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

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

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

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

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

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

不要将 require 与 ES6 模块语法一起使用。您应该 import 模块的依赖项,并配置 compiler/bundler 以支持加载外部脚本(如果您想使用 require.js 库,可能通过发出 AMD 语法模块)。

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

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)