es2022 - Sobre a importação de módulos em TypeScript
Eu tenho esta estrutura de arquivos:
∟ src
∟ math
├ funcs.ts
├ constants.ts
├ index.ts
├ index.ts
No meu src/index.ts, eu tentei isto:
import * as math from './math/index.js';
console.log(`pi = ${math.PI}`);
console.log(`The area of a circle with radius 4 is ${math.circleArea(4)}`);
e tudo funciona perfeitamente.
No entanto, eu preciso usar o Express.js, então eu atualizei o código:
import express from 'express';
import * as math from './math/index.js';
console.log(`pi = ${math.PI}`);
console.log(`The area of a circle with radius 4 is ${math.circleArea(4)}`);
Agora, eu tenho este erro:
src/index.ts:1:21 - error TS2792: Cannot find module 'express'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?
Este é o meu tsconfig.json:
{
"compilerOptions": {
"outDir":"build",
"target": "ES2022",
"module": "ES2022"
}
}
e este é o meu package.json:
{
"name": "typescript-lab",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc",
"start": "npm run build && node ./build/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.1",
"typescript": "^4.7.4"
}
}
A razão pela qual não posso configurar o tsconfig.json para usar module='node' é porque quero poder importar meus próprios módulos corretamente e também preciso usar um await no nível mais alto no meu arquivo index.ts...
Todas as minhas tentativas de alterar package.json ou tsconfig.json resultaram em:
- Não posso usar um
awaitno nível mais alto - Não consigo importar/encontrar meus módulos
- Não consigo importar nenhum módulo Node (express neste caso)
Alguém pode me ajudar? Obrigado
Resposta #1
meu tsconfig.json provavelmente, note que adicione "type": "module" ao package.json, "moduleResolution": "Node16" e
importar * como math de './math/index.js';
{
"compilerOptions": {
"sourceMap": true,
"target": "ES2022",
"outDir": "dist",
"baseUrl": ".",
// "allowJs": true,
"alwaysStrict": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"moduleResolution": "Node16",
"skipLibCheck": true,
"module": "ES2022",
"lib": [
"dom",
"es2015",
"ES2016",
"es2017",
"ES2018",
"ES2019",
"ES2020",
"ES2021",
"ES2022",
],
"paths": {
"~controllers/*": ["./src/controllers/*"],
"~models/*": ["./src/models/*"],
"~middlewares/*": ["./src/middlewares/*"],
"~services/*": ["./src/services/*"],
"~utils/*": ["./src/utils/*"],
"~routes/*": ["./src/routes/*"]
}
},
"include": ["./src/**/*.ts"],
"exclude": ["node_modules"],
"files": ["global.d.ts", "declarations.d.ts"]
}
