未在库中捆绑的环境类型描述定义

问题描述 投票:0回答:1

我正在使用TSDX工具来构建一个react-typescript库。我在我的 @types/ 目录中的内容,这些内容很清楚地被编译器接收,因为我在应用程序中使用它们时没有任何问题。

然而,在我的构建过程中,它们并没有被复制到我的输出捆绑包中,这让我很惊讶,因为它们是通过代码引用的(代码确实被正确捆绑)。

// tsconfig.json
{
  "include": ["src", "types", "test"],
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "lib": ["dom", "esnext"],
    "importHelpers": true,
    "declaration": true,
    "sourceMap": true,
    "rootDir": "./",
    "strict": true,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": false,
    "noFallthroughCasesInSwitch": true,
    "moduleResolution": "node",
    "baseUrl": "./",
    "paths": {
      "*": ["src/*", "node_modules/*"]
    },
    "jsx": "react",
    "esModuleInterop": true
  }
}
typescript declaration-files
1个回答
1
投票

不管你信不信,这其实是设计好的。

你可以在tsconfig.json中定义你的类型的位置,并且预计它们总是在最终的构建中(事实上,它们不会被移动),即给定这个结构。

src/app.ts
types/app.d.ts

Typescript希望你发布的构建是这样的:

build/app.js
build/app.d.ts
types/app.d.ts

为了达到这个目的,你可以在tsconfig中定义一个通往环境类型的路径。

{
    baseUrl: "./",
    paths: [
        "my-app": "./types/app.d.ts"
    ]
}

或添加一个typeRoot,它将包括一个目录内的所有类型,小心,它将覆盖任何现有的typeRoot,如那些到了 node_modules/@types 所以你需要重新声明它们。

{
    typeRoots: ['./types', 'node_modules/@types']
}

然后使用导入的 my-app 如果你已经声明了一个路径。

预计您的最终构建将包括以下内容 types 中定义的根目录下的目录。tsconfig.json.

我怀疑你是把你的 .d.ts 文件在您的应用程序源码目录中,因此不希望它被用于生产构建。在这种情况下,你需要手动将它移到你的构建中需要的位置,或者根据你的构建工具,用其他插件自动将它移到。

© www.soinside.com 2019 - 2024. All rights reserved.