我的tsconfig.json是:
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true
}
}
因为lodash.tonumber
没有类型,所以我宣布它为:
// lib.d.ts
declare module "lodash.tonumber" {
function toNumber(value: any): number;
export = toNumber;
}
然后我导入库如:
// index.ts
/// <reference path="./lib.d.ts" />
import toNumber from "lodash.tonumber";
export { toNumber }
它与预期的import()
完美配合。
当我想为index.ts
添加单元测试时,因为它在nodejs上运行,所以我应该用tsconfig.json
编译它,如:
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"allowSyntheticDefaultImports": true
}
}
运行测试后,它显示错误:lodash_tonumber_1.default is not a function
,生成的js文件为:
// index.js
/// <reference path="./lib.d.ts" />
var lodash_tonumber_1 = require("lodash.tonumber");
exports.toNumber = lodash_tonumber_1.default;
该文件说lodash.tonumber
应该像:
const toNumber = require("lodash.tonumber");
console.log(toNumber("123"));
所以生成的js文件错了,我的tsconfig.json在某个地方可能出错了,所以有什么不对?
我尝试将代码更改为:
// index.ts
/// <reference path="./lib.d.ts" />
import toNumber = require("lodash.tonumber");
export { toNumber }
对于单元测试(module = commonjs)的情况,它生成了正确的var toNumber = require("lodash.tonumber");
,因此它可以工作;
但是对于我的普通模块= esnext构建,它崩溃了,因为它没有生成import toNumber from "lodash.tonumber";
,运行时错误是ReferenceError: toNumber is not defined
,
我还检查了lodash.toNumber js代码:
function toNumber(value) {
if (typeof value == 'number') {
return value;
}
...
}
module.exports = toNumber;
所以我的类型应该是正确的。
接下来我该怎么办?
答案 0 :(得分:0)
DHL_DEVELOPER_ID
声明具有相同名称的命名空间。