我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;
所以我的類型應該是正確的。
接下來我該做什麼?