库中未捆绑环境 Typescript 定义
Ambient Typescript Definitions Not Bundled in Library
我正在使用 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
的导入来使用类型(如果您声明了路径。
预计您的最终构建将在您的 tsconfig.json
.
中定义的根目录中包含 types
目录
我怀疑您将 .d.ts
文件包含在您的应用程序源目录中,因此不希望它能够进入生产版本。在这种情况下,您需要手动将其移动到构建中需要它的位置,或者根据您的构建工具使用其他插件将其自动化。
我正在使用 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
的导入来使用类型(如果您声明了路径。
预计您的最终构建将在您的 tsconfig.json
.
types
目录
我怀疑您将 .d.ts
文件包含在您的应用程序源目录中,因此不希望它能够进入生产版本。在这种情况下,您需要手动将其移动到构建中需要它的位置,或者根据您的构建工具使用其他插件将其自动化。