繁体   English   中英

NRWL NX 库 typescript 环境声明文件

[英]NRWL NX library typescript ambient declaration files

我在新的 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文件处理的,但我还在/libs/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;

但是,如果我想将此变量导入my-app并运行它( nx serve my-app ),

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 中,但我不想避免它并保持类型接近代码。

另一个可行但丑陋的解决方案是在我的应用程序的 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 ... 并在那里引用相关的库。 my-app 的 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/"
        ]
    },
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM