Gol*_*den 5 javascript npm typescript es6-modules
我有一个用TypeScript编写的相当大的npm模块,它公开了许多类型,包括多个接口。现在,这些接口在根级别上都不都是有意义的,这就是为什么我想以一种可以嵌套的方式导入它们的方式来公开它们。
基本上,我正在寻找一种公开接口的方法,以便该模块的用户可以执行以下操作:
import { Foo } from 'my-module';
import { Bar } from 'my-module/sub-part';
Run Code Online (Sandbox Code Playgroud)
这可以在TypeScript中使用吗?如果可以,怎么办?什么不工作是这个代码在根index.ts文件:
export {
Foo,
{ Bar }
};
Run Code Online (Sandbox Code Playgroud)
请注意,这些.ts文件不在模块的根目录中,因此.js和.d.ts文件也不是。
我该如何解决?
PS:这与默认导出和命名导出无关,因为我想为导出多个嵌套级别的接口提供解决方案。
在最简单的情况下,您只需在已发布的 npm 包的和文件夹index.d.ts内有单独的文件,这样我们就可以导入和my-modulemy-module/sub-partmy-modulemy-module/sub-part。示例项目目录:
my-module\n| dist\n\xe2\x94\x82 index.ts\n\xe2\x94\x82 package.json // types prop e.g. could point to dist/index.d.ts\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80sub-part\n index.ts // compiled to dist/sub-part/index.d.ts\nRun Code Online (Sandbox Code Playgroud)\n\nTS 利用其模块解析过程来解析my-module或my-module/sub-part导入(假设不@types存在类似的全局类型声明)。例如,my-moduleinimport { Foo } from \'my-module\'是这样解析的:
// first, try to find file directly\nnode_modules/my-module.ts\nnode_modules/my-module.tsx\nnode_modules/my-module.d.ts\n\n// look in package.json for types property pointing to a file\nnode_modules/my-module/package.json // <-- lands here, if "types" prop exists\n\n// look in @types\nnode_modules/@types/my-module.d.ts\n\n// treat my-module as folder and look for an index file\nnode_modules/my-module/index.ts\nnode_modules/my-module/index.tsx\nnode_modules/my-module/index.d.ts // <-- lands here otherwise\nRun Code Online (Sandbox Code Playgroud)\n\n为了此处的完整性,my-module也my-module/sub-part可以将 和 定义为一个包含文件中的单独的全局模块声明,例如:
declare module "my-module" {\n const Foo: string\n}\n\ndeclare module "my-module/sub-part" {\n const Bar: number\n}\nRun Code Online (Sandbox Code Playgroud)\n\n最后,客户端代码如下所示:
\n\nimport { Foo } from "my-module";\nimport { Bar } from "my-module/sub-part";\n\nconsole.log(Foo)\nRun Code Online (Sandbox Code Playgroud)\n\n希望能帮助到你。
\n| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |