为什么 require() 不能为我导出到 node.js 模块的常量工作?
Why isn't require() working for my constants exported into a node.js modules?
我正在尝试 运行 这个 Jest 测试:
test("find the earliest start", () => {
expect(findEarliestStart([ex.TS2])).toBe(ex.TS2.start_time);
expect(findEarliestStart([ex.TS5, ex.TS2, ex.TS6])).toBe(ex.TS5.start_time);
});
我在测试文件中有这个要求:
const ex = require("constants");
我收到 TS2 未定义的错误,特别是“类型错误:无法读取未定义的 属性 'start_time'”。
在constants.ts我有:
const TS2: Timeslot =
{start_time: 940,
end_time: 980,
day: "Wed",
term: "2"
}
const TS5: Timeslot =
{start_time: 180,
end_time: 210,
day: "Wed",
term: "2"
}
const TS6: Timeslot =
{start_time: 250,
end_time: 310,
day: "Wed",
term: "2"
}
和
module.exports = {
TS2:TS2, TS5:TS5, TS6:TS6
}
函数 findEarliestStart 如下所示:
/**
* return the earliest start time out of all timeslots
* @param {Timeslot[]} lots
*/
export const findEarliestStart = (lots:Timeslot[]): Time => {
if(!lots.length){
throw new Error("cannot find earliest start of empty array");
};
return lots.reduce((min:number, ts:Timeslot) => {
return (ts.start_time < min) ? ts.start_time : min
},
Number.MAX_VALUE)
首先,您好,欢迎来到 Whosebug,@ptellier!
TL;DR: 使用const ex = require("./constants");
,在常量前面加上“./”。
节点中的require
有一些语法需要注意。通常,它用于 require
来自外部包的组件和模块,使用包管理器安装。在这种情况下,相应包的名称作为参数提供。如果包是命名空间的一部分,它以 @namespace/packagename
开头,否则它只是 packagename
.
要加载本地文件,你必须告诉节点你正在寻找一个本地文件而不是一个包。您可以通过使用相对路径前缀来完成此操作,例如 ./
用于与当前文件位于同一目录中的文件,或使用 ../
从当前文件夹的父目录开始。
由于缺少路径前缀,节点加载了其内部 constants
模块,该模块显然没有 TS*
属性,这就是为什么它们是 undefined
.
我正在尝试 运行 这个 Jest 测试:
test("find the earliest start", () => {
expect(findEarliestStart([ex.TS2])).toBe(ex.TS2.start_time);
expect(findEarliestStart([ex.TS5, ex.TS2, ex.TS6])).toBe(ex.TS5.start_time);
});
我在测试文件中有这个要求:
const ex = require("constants");
我收到 TS2 未定义的错误,特别是“类型错误:无法读取未定义的 属性 'start_time'”。
在constants.ts我有:
const TS2: Timeslot =
{start_time: 940,
end_time: 980,
day: "Wed",
term: "2"
}
const TS5: Timeslot =
{start_time: 180,
end_time: 210,
day: "Wed",
term: "2"
}
const TS6: Timeslot =
{start_time: 250,
end_time: 310,
day: "Wed",
term: "2"
}
和
module.exports = {
TS2:TS2, TS5:TS5, TS6:TS6
}
函数 findEarliestStart 如下所示:
/**
* return the earliest start time out of all timeslots
* @param {Timeslot[]} lots
*/
export const findEarliestStart = (lots:Timeslot[]): Time => {
if(!lots.length){
throw new Error("cannot find earliest start of empty array");
};
return lots.reduce((min:number, ts:Timeslot) => {
return (ts.start_time < min) ? ts.start_time : min
},
Number.MAX_VALUE)
首先,您好,欢迎来到 Whosebug,@ptellier!
TL;DR: 使用const ex = require("./constants");
,在常量前面加上“./”。
节点中的require
有一些语法需要注意。通常,它用于 require
来自外部包的组件和模块,使用包管理器安装。在这种情况下,相应包的名称作为参数提供。如果包是命名空间的一部分,它以 @namespace/packagename
开头,否则它只是 packagename
.
要加载本地文件,你必须告诉节点你正在寻找一个本地文件而不是一个包。您可以通过使用相对路径前缀来完成此操作,例如 ./
用于与当前文件位于同一目录中的文件,或使用 ../
从当前文件夹的父目录开始。
由于缺少路径前缀,节点加载了其内部 constants
模块,该模块显然没有 TS*
属性,这就是为什么它们是 undefined
.