我正在使用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)
我在哪里错了?我以前使用过的所有导出函数都不需要任何依赖关系。
谢谢!
答案 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)