当前位置: 首页 > 知识库问答 >
问题:

从另一个TypeScript包导入TypeScript类型

晏弘雅
2023-03-14

我撰写并发表了以下内容:https://github.com/justin-calleja/pkg-dependents

现在我写这个包在TypeScript:https://github.com/justin-calleja/update-dependents

我想在update dependents中重复使用pkg dependents(IndexInfoDict)中定义的类型,我想检查是否有比这更好的方法:

在pkg家属索引中。ts:

import { IndexInfoDict } from './interfaces';

export interface IndexInfoDict extends IndexInfoDict {};

也就是说,我正在导入IndexInfoDict接口来注释pkg依赖项的index.ts中的函数,但是因为我想在update-依赖项中使用相同的类型,所以我被迫导出另一个扩展自身的IndexInfoDict...

这似乎是一种奇怪的模式,但编译器现在很高兴。

注意:为共享该类型而采取的其他步骤:

  1. 在tsconfig.json中使用声明:true,以便为导出某些内容的每个. ts文件生成一个.d.ts文件。
  2. 在pkg依赖项的package.json中使用typings:(path-to-generated-index.d.ts),这样您就可以在其他Typecript项目中导入index.js,它将通过index.d.ts.知道索引文件的API
  3. 要实际导入类型并重新使用它:从'pkg-依赖项/lib/index.d.ts'导入{IndexInfoDict};

有人能证实没有更好的方法吗?

我想要的,但不知道是否可能,是:

  1. 不必以扩展自身的方式导出IndexInfoDict(我只需要导出类型就行了……这很有意义)

编辑1:

我想得越多,上面的2(避免使用“pkg-依赖项/lib/index.d.ts”)似乎越不可能。我希望tsc有一些魔力,可以从“index.d.ts”中获取类型定义,即使正在导入“index.js”——这样我就可以从Typecript项目中的“pkgDependents”导入{pkgDependents, IndexInfoDict},然后从JS项目中的“pkg-依赖项”导入{pkgDependents}(没有tsc魔力,JS无论如何都没有类型,所以IndexInfoDict已经过时)。

目前,我必须:

import pkgDependents from 'pkg-dependents';
import { IndexInfoDict } from 'pkg-dependents/lib';

所以好吧...也许没有魔法。1呢?除了导出自扩展类型之外,还有没有更容易混淆的导出导入类型的方法?

(我在pkg dependents中不止一个地方使用IndexInfoDic。其中一个恰好是index.ts,主要导出函数。因此,我希望它在index.ts之外,但从index.ts导出,因此它在index.d.ts中生成,用户从index.d.ts获得主函数使用的类型)。

共有1个答案

那弘
2023-03-14

在你的索引中。ts,你可以做:

export { IndexInfoDict } from "./interfaces;

这将从主文件导出接口。

 类似资料:
  • 本文向大家介绍TypeScript 从npm导入模块,包括了TypeScript 从npm导入模块的使用技巧和注意事项,需要的朋友参考一下 示例 如果模块具有类型定义文件(d.ts),则可以使用import语句。 如果您没有模块的定义文件,TypeScript将在编译时抛出错误,因为它找不到您要导入的模块。 在这种情况下,可以使用正常的运行时require功能导入模块。但是,这将其返回为any类型

  • 问题内容: 在将其标记为重复之前, 请阅读我的问题: 我正在尝试从子目录的文件中导入类 并且在我的课程中有()我尝试了什么: 放入main.py: 我收到错误消息: 从文件导入Klasa ImportError:没有名为“文件”的模块 当我尝试使用时: 我收到此错误: tmp = Klasa() NameError:未定义名称“ Klasa” 我在子文件夹中放了一个空格,它仍然不起作用,而我在 :

  • 像函数参数一样,类有时具有可选成员。 同样的语法可以用于class定义: nickName?: string; 在上面的示例中,的实例保证有一个name,并且可以可选地具有nickName。 修饰符 public:类的每个成员默认为,可以自由被访问。 private:类成员被标记为private时就不能在类的外部访问。 继承与多态 封装,继承和多态是面型对象的三大特性。 TypeScript的

  • 模块“Transformer”解析为非模块实体,不能使用此构造导入。 如何导入类?其实我只是想利用那堂课。我不希望指令在我的代码中产生附带效应。我只想用它:'(

  • 我正在写一个应用程序使用Node.js.具体来说,我使用节点v10.3.0。此应用程序位于位于。此应用程序有一个package.json文件位于。这个应用程序引用了一个在中定义的类。需要注意的是表示自己的包。这个包是在中定义的。index.js代码如下: 当我尝试运行此操作时,会出现以下错误: 我的进口声明有什么问题?在我看来这是正确的。我是不是误解了什么? 项目js 谢谢