16

This is my logger.ts file that error happens there:

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?

Hasani
  • 3,543
  • 14
  • 65
  • 125

3 Answers3

30

dayjs does not export a default entry like that; use import * as dayjs from 'dayjs' to import all of it's exports (as you are trying to do)

0xLogN
  • 3,289
  • 1
  • 14
  • 35
10

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"
    }
}
klshv
  • 101
  • 1
  • 2
  • I tried this and it was creating `js` files for every `ts` file in the src directory. Not sure why but I had to remove and had to use use import * as dayjs from 'dayjs'. – FAntony Mar 08 '23 at 00:08
2

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.

Harsh Mangalam
  • 1,116
  • 1
  • 10
  • 19