typescript - Los tipos de workspace de yarn referenciados no son reconocidos por tsc, pero funcionan en VS Code
Tengo un monorepo donde tengo dos espacios de trabajo usando TypeScript, /ui y /graphql
/ui hace referencia a /graphql, y VS Code puede obtener los tipos de él, agregar importaciones, autocompletar propiedades, etc. Pero cuando intento ejecutar tsc --build para /ui, lanza errores sobre no poder encontrar el módulo para las importaciones:
Aquí está el tsconfig para /graphql:
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"composite": true,
"jsx": "react",
"declaration": true,
"declarationMap": true,
"noEmit": false,
"outDir": "build",
"rootDir": "src"
},
"include": ["**/*.tsx", "**/*.ts"],
"exclude": ["build"]
}
aquí está el tsconfig base:
{
"compilerOptions": {
"incremental": true,
"noEmitOnError": true,
"allowJs": false,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"jsx": "preserve",
"lib": ["dom", "esnext"],
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"preserveConstEnums": true,
"resolveJsonModule": true,
"sourceMap": true,
"removeComments": false,
"strict": true,
"strictNullChecks": true,
"importHelpers": true,
"suppressImplicitAnyIndexErrors": true,
"preserveWatchOutput": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"baseUrl": ".",
"paths": {
"packages/*": ["packages/*"]
}
},
"exclude": ["*node_modules", "**/*.test.ts*"]
}
y aquí está el /ui tsconfig:
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"composite": true,
"noEmit": false,
"outDir": "build",
"rootDir": "src",
"lib": ["dom", "dom.iterable", "esnext"],
"isolatedModules": true,
"jsx": "react-jsx",
"allowJs": true,
"declaration": true,
"declarationMap": true,
"paths": {
"@/*": ["src/*"],
"@/config": ["src/config.ts"],
"@/components/*": ["src/components/*"],
"@/assets/*": ["src/assets/*"]
}
},
"types": [
"jest",
"@types/testing-library__react",
"@types/testing-library__jest-dom",
"node"
],
"references": [
{
"path": "../graphql"
}
],
"exclude": ["build"],
"include": ["src"]
}
Todo parece estar en orden, especialmente al usar VS Code, ya que todo funciona en lo que respecta a las funciones de TypeScript.
Ejecutar tsc --build en el repositorio /graphql pasa sin errores (incluso si no hay salida debido al tsconfig, también se intentó agregar outFile sin éxito).
Pero cuando ejecuto tsc --build o tsc -p tsconfig.json en el paquete /ui, obtengo errores como:
Could not find a declaration file for module '@goe/graphql'. '[...]/packages/frontend/graphql/build/index.js' implicitly has an 'any' type.
¿Qué estoy haciendo mal?
Respuesta #1
Parece que podría haber tropezado con la solución al leer mi pregunta, la parte del error que decía que index.js era de tipo any me hizo pensar que tal vez solo necesitaba emitir tipos con el mismo nombre, así que solo cambié el tsconfig de graphql a
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"composite": true,
"jsx": "react",
"declaration": true, // this option alone to emit types next to each compiled file
"noEmit": false,
"outDir": "build",
"rootDir": "src"
},
"include": ["**/*.tsx", "**/*.ts"],
"exclude": ["build"]
}
y ahora la compilación tsc en /ui funciona :)
