Typescript nevie vyriešiť súbor index.ts pri používaní aliasu cesty, pokiaľ nie je explicitne zahrnutý ($myPackage/index)


Predpokladajte nasledujúcu štruktúru projektu:

packages/
   utilities/
      index.ts
   app/
      app.ts
tsconfig.json

Vytvoril som aliasy ciest, aby som mohol ľahšie pristupovať k balíkom medzi sebou, môj tsconfig vyzerá takto

{
  "compilerOptions": {
    "moduleResolution": "node",
    "noEmit": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "allowJs": false,
    "noImplicitAny": true,
    "strict": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "baseUrl": ".",
    "paths": {
      "$app/*": ["packages/app/*"],
      "$utilities/*": ["packages/utilities/*"],
    }
  },
  "include": [
    "packages/*"
  ]
}

Nakoniec je môj súbor packages/utilities/index.ts

export { isValidEmail } from '$utilities/validators';
//... etc

Spočiatku som si myslel, že môj balík aplikácie bude schopný urobiť niečo takéto

import { isValidEmail } from "$utilities";
// Errors Cannot find module '$utilities' or its corresponding type declarations.

Ale vyhodí chybu s vyššie uvedenou správou, pokiaľ nepoužijem úplnú cestu $utilities/index

Odpoveď č. 1

Urobil som tento trik a vyriešil môj problém

"paths": {
    "@services": ["src/services"],
    "@services/*": ["src/services/*"],
    "@/*": ["src/*"]
},

Teraz môžem pristupovať k src/services/index týmto riadkom

import { useUtil } from '@services';

A funguje to aj vtedy, ak chcem pristupovať k podriadeným súborom/zložkám

Tiež som si všimol, že aliasy ciest na vrchu majú prednosť (v intellisense a automatických importoch) pred tými, ktoré sú až potom. Preto je lepšie dať dlhšie aliasy hore a kratšie na koniec.

Súvisiace články