我正在使用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
}
}
不管你信不信,这其实是设计好的。
你可以在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
文件在您的应用程序源码目录中,因此不希望它被用于生产构建。在这种情况下,你需要手动将它移到你的构建中需要的位置,或者根据你的构建工具,用其他插件自动将它移到。