Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用路径别名时,Typescript无法解析index.ts文件,除非显式包含($myPackage/index)_Typescript - Fatal编程技术网

使用路径别名时,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
作为单独的条目。也许有人能给出一个更干净的解决方案,但我认为这就是它的工作方式。