NRWL NX库typescript环境声明文件



我在新的NX工作区中有一个基本设置

  • /apps/my-app(节点类型(
  • /libs/some lib(节点类型(

两者都是使用nx-cli命令创建的:即nx g@nrwl/node:lib some-lib-simpleModuleName=true

对于库,我想使用环境声明文件(.d.ts(。我在/libs/some-lib/src/types/index.d.ts中添加了一个,内容:

declare type MyCustomType = any;

据我所知,该文件是基于/libs/some-lib/tsconfig.lib.json文件处理的,但我也在/lbs/some-lib/tsconfig.json中添加了对该文件的直接引用:

{
"extends": "../../../tsconfig.base.json",
"files": [
"src/types/index.d.ts"
],
"include": [
"src/types/**/*.d.ts"
],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

当我在lib的代码中使用这个文件时,我的IDE很高兴,例如:/libs/some-lib/src/lib/file.ts

export const x: MyCustomType = 1;

但是,如果我想将此变量导入我的应用程序并运行它(nx为我的应用服务(,

import { x } from '@my-workspace/some-lib';

我从编译器那里得到一个错误:

ERROR in libs/some-lib/src/lib/file.ts
TS2304: Cannot find name "MyCustomType".

所以我的问题是,有没有一种方法可以在库中使用环境声明文件,并且在运行从该库导入抽象的应用程序时不会出错?

我可以在根文件夹中创建共享类型:*types/myCustomType.d.ts"然后将其包含在应用程序和库的tsconfigs-in-files属性中,但我不想避免它,并将类型保持在代码附近。

另一个可行但丑陋的解决方案是在我的应用程序的tsconfig文件中添加对库的额外引用:

{
"path": "../../libs/some-lib/tsconfig.json"
}

结果/apps/my-app/tsconfig.json:

{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.spec.json"
},
{
"path": "../../libs/node/schedulers/tsconfig.json"
}
]
}

或者创建一个tsconfig.json桶:/libs/tsconfig.json…并在那里引用相关的库。我的应用程序的tsconfig文件只需要引用这一个文件。

为所有类型的types/创建根目录为应用程序和库创建子目录

  • types/lib-a/
  • types/lib-b/
  • types/app-a/

无需将这些类型添加到tsconfig.base.json中。将所有tsconfig文件恢复为默认值,然后在每个库和应用程序的tsconfig.json文件中添加typeRoots。还包括它所依赖的库的typeRoots。

  1. libs/lib-a/tsconfig.lib.json
{
...
"compilerOptions": {
"typeRoots": ["../../../types/lib-a/"]
},
...
}
  1. libs/lib-b/tsconfig.lib.json
{
...
"compilerOptions": {
"typeRoots": ["../../../types/lib-b/"]
},
...
}
  1. apps/app-a/tsconfig.app.json还在此处添加依赖库的类型
{
...
"compilerOptions": {
"typeRoots": [
"../../../types/lib-a/",
"../../../types/app-a/"
]
},
...
}

相关内容

  • 没有找到相关文章

最新更新