Reputation: 3889
This is my logger.ts
file, where the error below happens:
import logger from "pino";
import dayjs from "dayjs";
const log = logger({
prettyPrint: true,
base: {
pid: false,
},
timestamp: () => `,"time":"${dayjs().format()}"`,
});
export default log;
ERROR:
yarn dev
yarn run v1.22.17
warning package.json: License should be a valid SPDX license expression
warning ..\..\..\..\package.json: No license field
$ ts-node-dev --respawn --transpile-only src/app.ts
[INFO] 19:09:45 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.6.3)
TypeError: (0 , dayjs_1.default) is not a function
at timestamp (C:\Users\A\Desktop\desktop\base_code\back_bc_node\src\utils\logger.ts:9:37)
at pino (C:\Users\A\Desktop\desktop\base_code\back_bc_node\node_modules\pino\pino.js:147:26)
at Object.<anonymous> (C:\Users\A\Desktop\desktop\base_code\back_bc_node\src\utils\logger.ts:4:19)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Module._compile (C:\Users\A\Desktop\desktop\base_code\back_bc_node\node_modules\source-map-support\source-map-support.js:568:25)
at Module.m._compile (C:\Users\A\AppData\Local\Temp\ts-node-dev-hook-15803171947249184.js:69:33)
at Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
at require.extensions.<computed> (C:\Users\A\AppData\Local\Temp\ts-node-dev-hook-15803171947249184.js:71:20)
at Object.nodeDevHook [as .ts] (C:\Users\A\Desktop\desktop\base_code\back_bc_node\node_modules\ts-node-dev\lib\hook.js:63:13)
at Module.load (node:internal/modules/cjs/loader:981:32)
[ERROR] 19:09:46 TypeError: (0 , dayjs_1.default) is not a function
(node:10308) [PINODEP008] PinoWarning: prettyPrint is deprecated, look at https://github.com/pinojs/pino-pretty for alternatives.
(Use `node --trace-warnings ...` to show where the warning was created)
It was working on my previous app, but I don't know why do I get this error for my new application. How can I resolve this problem?
Upvotes: 25
Views: 57840
Reputation: 3825
Day.js does not export a default entry like that; use import * as dayjs from 'dayjs'
to import all of its exports (as you are trying to do).
Upvotes: 45
Reputation: 19
This may happen because you have not added the identifier of the path where this file is located to the include in tsconfig.json. I also encountered this problem, and finally found out about it through a very accidental prompt. And there is no need for the require import method.
Upvotes: -1
Reputation: 179
I have solved the same problem by adding "esModuleInterop": true
to tsconfig.json:
{
"compilerOptions": {
"noImplicitAny": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"moduleResolution": "node",
"module": "commonjs",
"target": "es6"
}
}
Upvotes: 17
Reputation: 59
When I change the import to
import * as dayjs from 'dayjs'
the node runs normally, but the typeScript throws an error. Changing the import to
import dayjs = require('dayjs');
solved the problem.
Upvotes: 6