Búsqueda de sitios web

node.js - error TS1005: se esperaba ','. import { type ParserOptions }


Aquí está mi package.json

{
  "main": "index.js",
  "scripts": {
    "prebuild": "rimraf dist && tsc",
    "prod": "knex migrate:latest --env production && ts-node -r tsconfig-paths/register dist/index.js",
  }, 
  "dependencies": {
    "@types/aws-sdk": "^2.7.0",
    "@types/axios": "^0.14.0",
    "@types/convict": "^6.1.3",
    "@types/knex": "^0.16.1",
    "@types/lodash": "^4.14.197",
    "@types/morgan": "^1.9.5",
    "@types/multer": "^1.4.7",
    "@types/uuid": "^9.0.2",
    "ajv": "^8.6.3",
    "aws-sdk": "^2.1445.0",
    "axios": "^1.4.0",
    "base64url": "^3.0.1",
    "convict": "^6.2.1",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "express-http-context": "^1.2.4",
    "html-to-pdfmake": "^2.4.25",
    "https": "^1.0.0",
    "js-yaml": "^4.1.0",
    "jsdom": "^22.1.0",
    "jsonwebtoken": "^8.5.1",
    "jws": "^4.0.0",
    "knex": "^0.95.15",
    "lodash": "^4.17.21",
    "merge": "^2.1.1",
    "moment": "^2.29.1",
    "moment-timezone": "^0.5.34",
    "morgan": "^1.10.0",
    "multer": "^1.4.5-lts.1",
    "node-cache": "^5.1.2",
    "nodemailer": "^6.9.5",
    "nodemon": "^3.0.1",
    "papaparse": "^5.3.2",
    "path": "^0.12.7",
    "pdfmake": "^0.2.7",
    "pg": "^8.7.1",
    "redis": "^4.1.0",
    "socket.io": "^4.5.0",
    "string-strip-html": "^8.3.0",
    "textract": "^2.5.0",
    "typescript": "4.4.3",
    "ulid": "^2.3.0",
    "uuid": "^8.3.2",
    "winston": "^3.3.3",
    "yaml": "^2.2.1"
  },
  "devDependencies": {
    "@types/html-to-pdfmake": "^2.4.2",
    "@types/jest": "^28.1.3",
    "@types/jsdom": "^21.1.3",
    "@types/nodemailer": "^6.4.11",
    "@types/pdfmake": "^0.2.4",
    "jest": "^28.1.3",
    "ts-jest": "^28.0.8",
    "ts-node": "^10.2.1",
    "ts-node-dev": "^1.1.8",
    "tsconfig-paths": "^3.12.0",
    "typescript": "4.4.3"
  },
 
}

Este es un archivo tsconfig

{
"compilerOptions": {
  "target": "es5",
  "module": "commonjs",
  "rootDir": ".",
  "baseUrl": "./src",
  "outDir": "dist",
  "esModuleInterop": true,
  "moduleResolution": "node",
  "allowSyntheticDefaultImports": true,
  "lib": [
    "esnext",
    "dom"
  ],
  "forceConsistentCasingInFileNames": true,
  "strict": true,
  "skipLibCheck": true,
  "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
  }
}

Este es mi Makefile

# Stage 1: Build Stage
FROM node:19.9.0-alpine3.17
WORKDIR /app
COPY package.json ./
COPY tsconfig.json ./
RUN apk add --no-cache \
RUN apk add  \
    make \
    && npm install
COPY . .
RUN npm install -g knex
RUN npm run prebuild

Stage 2: Runtime Stage
EXPOSE 8055
CMD ["npm", "run", "prod"]

Estoy recibiendo un error al compilar

[8/8] RUN npm run prebuild: 0.483 0.483 > [email  prebuild 0.483 > rimraf dist && tsc 0.483 9.352 node_modules/parse5/dist/index.d.ts(1,15): error TS1005: se esperaba ',' 9.353 node_modules/parse5/dist/index.d.ts(4,15): error TS1005: se esperaba ',' 9.353 node_modules/parse5/dist/index.d.ts(6,15): error TS1005: se esperaba ',' 9.354 node_modules/parse5/dist/index.d.ts(7,42): error TS1005: se esperaba ',' 9.354 node_modules/parse5/dist/index.d.ts(8,34): error TS1005: se esperaba ',' 9.354 node_modules/parse5/dist/index.d.ts(16,26): error TS1005: se esperaba ',' 9.354 node_modules/parse5/dist/index.d.ts(16,64): error TS1005: se esperaba ','

Respuesta #1

El error señala la primera línea de import:

import { Parser, type ParserOptions } from './parser/index.js';
//                    ^ error TS1005: ',' expected.

tsc espera un separador para una nueva importación con nombre, mientras que aquí tenemos una palabra clave type.

Esta importación con nombre con el modificador type "inline" se ha introducido en la versión 4.5 de TypeScript:

[...] sería bueno evitar dos declaraciones de importación para el mismo módulo. Esa es parte de la razón por la que TypeScript 4.5 permite un modificador de tipo en las importaciones nombradas individuales, para que puedas mezclarlas y combinarlas según sea necesario.

...mientras que tu package.json requiere:

"typescript": "4.4.3"

Entonces, si tu proyecto lo permite, deberías estar bien simplemente actualizando tu dependencia de desarrollo typescript a la versión 4.5 o superior.