Typescript kan het index.ts-bestand niet oplossen bij het gebruik van een padalias, tenzij het expliciet is opgenomen ($myPackage/index)
Ga uit van de onderstaande projectstructuur:
packages/
utilities/
index.ts
app/
app.ts
tsconfig.json
Ik heb pad-aliassen gemaakt om gemakkelijker toegang te krijgen tot pakketten tussen elkaar, mijn tsconfig ziet er zo uit
{
"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/*"
]
}
Eindelijk is mijn packages/utilities/index.ts bestand een soort tussenvorm die alle utils importeert en exporteert die ik wil blootstellen, d.w.z.
export { isValidEmail } from '$utilities/validators';
//... etc
Ik dacht in eerste instantie dat mijn app-pakket zoiets zou kunnen doen
import { isValidEmail } from "$utilities";
// Errors Cannot find module '$utilities' or its corresponding type declarations.
Maar het geeft de bovenstaande foutmelding tenzij ik het volledige pad $utilities/index gebruik
Antwoord #1
Ik deed deze truc en het loste mijn probleem op
"paths": {
"@services": ["src/services"],
"@services/*": ["src/services/*"],
"@/*": ["src/*"]
},
Nu kan ik src/services/index benaderen met deze regel
import { useUtil } from '@services';
En het werkt ook als ik toegang wil tot kinderbestanden/-mappen
Ik merkte ook dat padaliassen bovenaan een hogere prioriteit hebben (in intellisense & automatische imports) dan degene die erna komen. Het is dus beter om langere aliassen bovenaan te zetten en kortere aan het einde.
