Hasani
Hasani

Reputation: 3889

How to resolve "TypeError: (0 , dayjs_1.default) is not a function"

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

Answers (4)

0xLogN
0xLogN

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

WW L
WW L

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

klshv
klshv

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

Eduardo Ramos
Eduardo Ramos

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

Related Questions