从另一个TypeScript包导入TypeScript类型

从另一个TypeScript包导入TypeScript类型,typescript,Typescript,我已经撰写并发布了以下内容: 现在我正在用Typescript编写这个包: 我想在updatedependents中重复使用pkg dependents(IndexInfoDict)中定义的类型,我想检查是否有比这更好的方法: 在pkg dependents的index.ts中: import { IndexInfoDict } from './interfaces'; export interface IndexInfoDict extends IndexInfoDict {}; i、 我

我已经撰写并发布了以下内容:

现在我正在用Typescript编写这个包:

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

在pkg dependents的index.ts中:

import { IndexInfoDict } from './interfaces';

export interface IndexInfoDict extends IndexInfoDict {};
i、 我正在导入IndexInfoDict接口来注释pkg dependents的index.ts中的函数,但是因为我想在更新dependents中使用相同的类型,我被迫导出另一个扩展自身的IndexInfoDict

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


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

  • 在tsconfig.json中使用“declaration”:true,以便为导出内容的每个.ts文件生成一个.d.ts文件
  • 在pkg dependents的package.json中使用“typings”:(生成的index.d.ts的路径),这样您就可以在其他Typescript项目中导入index.js,它将通过index.d.ts知道索引文件的API
  • 要实际导入类型并重新使用它:
    import{IndexInfoDict}来自'pkg dependents/lib/index.d.ts'

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

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

  • 不必以扩展自身的方式导出IndexInfoDict(我只需要导出类型就行了……这很有意义)
  • 以某种方式避免在导入中使用“pkg dependents/lib/index.d.ts”。它可以从“pkg依赖项”导入{pkgDependents,IndexInfoDict}吗。。。但由于“pkg dependents”是指一个JS文件(pkg dependents的package.json的main是./lib/index.JS),我怀疑这是否可能
  • 编辑1:

    我想得越多,上面的2条(避免'pkg dependents/lib/index.d.ts')似乎就越不可能。我希望tsc有一些魔力,能够从'index.d.ts'中获得类型定义,即使'index.js'正在导入-这样我就可以从'pkg dependents'中导入{pkgDependents,IndexInfoDict},从Typescript项目中导入
    ,从'pkg dependents'中导入{pkgDependents},从js项目中导入(没有tsc magic,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获得主函数使用的类型)。

    在index.ts中,您可以执行以下操作:

    export { IndexInfoDict } from "./interfaces;
    

    这将从主文件中导出接口。

    我不明白为什么必须重新定义
    IndexInfoDict
    ?为什么不能从“/interfaces”中导入{IndexInfoDict};任何需要的地方?@MattLishman你是对的。我的理由是“我希望pkg依赖项的所有用户都需要在一个地方”。该位置不能是index.js(接口类型不会出现).So/lib/index.t.ds是第二个最佳位置。用户仍然需要2个导入stmt,但至少不需要记住接口dir的路径。我导入IndexInfoDict并在index.ts中再次导出它,因此它将在index.d.ts中生成,用户有一个位置获取主代码,还有一个相关位置获取主代码类型(他们只需要知道它在/lib/index.t.ds中的位置)。@MattLishman我继续说,我意识到为了保留index.t.ds中的主要类型,我需要导入/导出其他类型,而IndexInfoDict是由这些类型生成的(只留下一个只在内部使用的类型)。也许这不值得,但我喜欢在项目pkg依赖项(src/interfaces)中为所有类型设置一个位置,然后可以选择在index.t.ds中导出哪些类型。但也许这没有意义?也许所有类型都应该是“public”…好得多,谢谢!对于任何阅读本文的人来说都是值得的,我决定将所有类型放在src/interfaces中的pkg dependents中(甚至是在同一项目中没有跨文件使用的类型)。然后在index.ts中,我导入/导出index.js导出中使用的类型及其依赖类型(例如,由IndexInfoDict组成的类型)。