使用路径别名时,Typescript无法解析index.ts文件,除非显式包含($myPackage/index)
假设项目结构如下:使用路径别名时,Typescript无法解析index.ts文件,除非显式包含($myPackage/index),typescript,Typescript,假设项目结构如下: packages/ utilities/ index.ts app/ app.ts tsconfig.json 我创建了路径别名以便在彼此之间更容易地访问包,我的tsconfig如下所示 { "compilerOptions": { "moduleResolution": "node", "noEmit": true, "
packages/
utilities/
index.ts
app/
app.ts
tsconfig.json
我创建了路径别名以便在彼此之间更容易地访问包,我的tsconfig如下所示
{
"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/*"
]
}
import { isValidEmail } from "$utilities";
// Errors Cannot find module '$utilities' or its corresponding type declarations.
最后,我的packages/utilities/index.ts
文件是一个中点,可以导入和导出我想要公开的所有util,即
export { isValidEmail } from '$utilities/validators';
//... etc
我最初认为我的应用程序包可以做这样的事情
{
"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/*"
]
}
import { isValidEmail } from "$utilities";
// Errors Cannot find module '$utilities' or its corresponding type declarations.
但除非我使用完整路径$utilities/index
,否则上面的消息会出错,因为isValidMail是由index.ts导出的,所以它可以按预期工作
在import语句中,必须设置要引用的文件的路径,就像在export语句中一样
在这种情况下,它将是:
import { isValidEmail } from '$utilities/index';
我做了这个把戏,它解决了我的问题
"paths": {
"@services": ["src/services"],
"@services/*": ["src/services/*"],
"@/*": ["src/*"]
},
现在我可以通过此行访问src/services/index
import { useUtil } from '@services';
如果我想访问子文件/文件夹,它也可以工作
我还注意到,上面的路径别名比后面的路径别名优先级更高(在intellisense&auto imports中)。因此,最好将较长的别名放在顶部,将较短的别名放在最后。路径指定
$utilities/*
将映射到相应的目录,因此如果要以这种方式导入,则必须将$utilities
作为单独的条目。也许有人能给出一个更干净的解决方案,但我认为这就是它的工作方式。