我们的库@ltonetwork/lto是用 typescript 编写的。我们使用tsc
在lib
文件夹中编译为JavaScript。
该软件包包含几个子软件包,这些子软件包位于包含index.ts文件的子文件夹中。
当试图导入一个子模块时,像这样
import {Transfer} from "@ltonetwork/lto/transactions";
字符串
我希望这能正常工作,但我得到了以下错误
test.ts:1:24 - error TS2307: Cannot find module '@ltonetwork/lto/transactions' or its corresponding type declarations.
型
@ltonetwork/lto的package.json包含
{
"scripts": {
"compile": "tsc -p ./tsconfig.json"
},
"main": "lib",
"exports": {
".": "./lib/index.js",
"./*": "./lib/*/index.js",
"./package.json": "./package.json"
},
"files": [
"lib",
"interfaces.d.ts"
]
}
型
而tsconfig.json是
{
"compilerOptions": {
"alwaysStrict": true,
"baseUrl": "",
"lib": ["es2017.object", "es2015", "es6", "dom"],
"module": "commonjs",
"sourceMap": true,
"declaration": true,
"target": "es6",
"paths": {},
"rootDir": "src",
"outDir": "lib"
},
"include": ["src"]
}
型
我尝试显式地命名子模块,而不是在exports
中使用通配符,但这没有什么区别。
我做错了什么导致了这个导入问题?
编辑:**这与monorepos或yarn工作空间无关。**这是关于在npm中使用typescript 4.7.1-rc的exports
字段。此功能在早期版本的typescript中不起作用。
有关详细信息,请参见https://github.com/microsoft/TypeScript/issues/33079
我也试过
{
"scripts": {
"compile": "tsc -p ./tsconfig.json"
},
"main": "lib",
"exports": {
".": {
"require": {
"default": "./lib/index.js",
"types": "./lib/index.d.ts"
},
"import": {
"default": "./lib/index.js",
"types": "./lib/index.d.ts"
}
},
"./transactions": {
"require": {
"default": "./lib/transactions/index.js",
"types": "./lib/transactions/index.d.ts"
},
"import": {
"default": "./lib/transactions/index.js",
"types": "./lib/transactions/index.d.ts"
}
},
"./package.json": "./package.json"
},
"files": [
"lib",
"interfaces.d.ts"
]
}
型
2条答案
按热度按时间ubof19bj1#
确保使用库中的
moduleResolution
在tsconfig.json
文件中设置为Node16
或NodeNext
。编辑:
bundler
现在也是一个选项。ifsvaxew2#
自Typescript 3.1以来,我们已经能够做到这一点,它不需要消费者拥有
tsconfig.json
。字符串
这可能只适用于命名的子模块。