我tsconfig.json是:如何使lodash.tonumber与Typescript中的import()和commonjs单元测试一起工作?
{
"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文件是:
const toNumber = require("lodash.tonumber");
console.log(toNumber("123"));
:
// index.js
/// <reference path="./lib.d.ts" />
var lodash_tonumber_1 = require("lodash.tonumber");
exports.toNumber = lodash_tonumber_1.default;
该文件称的lodash.tonumber
应该像使用
所以生成的js文件是错误的,我的tsconfig.json可能在某处出错了,所以怎么了?
我试图改变代码:
// index.ts
/// <reference path="./lib.d.ts" />
import toNumber = require("lodash.tonumber");
export { toNumber }
对于单元测试(模块= 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;
所以我的类型应该是正确的。
接下来我该做什么?