【问题标题】:Exporting a class ONLY as a type in a typescript definition file仅将类导出为打字稿定义文件中的类型
【发布时间】:2020-03-18 16:46:30
【问题描述】:

假设你有一个像这样的名为my-lib 的 ES6 库

export class Foo {
   ...
   createBar() {
      return new Bar();
   }
   ...
}
class Bar() {
   method1() {}
   method2() {}
   method3() {}
}

你必须像这样为上面的库编写打字稿定义。

export class Foo() {
    ...
    public createBar():Bar;
}
export class Bar() {
   method1(): void
   method2(): void
   method3(): void
}

我的问题是:Bar 类是否应该被导出?

如果是,则编写以下代码

import { Bar } from 'my-lib'

将导致声明一个未定义的Bar 变量

如果不是,那么下面的说法是不正确的,因为Bar没有被导入

const foo = new Foo()
const bar: Bar = foo.createBar();

我应该如何定义Bar 类,以便将其导出为类型而不是类?

【问题讨论】:

    标签: typescript types typescript-typings .d.ts


    【解决方案1】:

    我不确定我是否理解您想要实现的目标,但如果您不想直接公开您的类而只想公开其“形状”(类型),您可以将其定义为接口。

    export class Foo {
        createBar(): IBar {
            return new Bar();
        }
    }
    
    class Bar {
        method1() { }
        method2() { return 'test'; }
        method3() { return true; }
    }
    
    export interface IBar {
        method1: () => void,
        method2: () => string,
        method3: () => boolean,
    }
    
    const foo = new Foo()
    const bar: IBar = foo.createBar();
    

    然后你只导入 Foo 和 IBar。

    【讨论】:

    • 我实际上删除了放置其接口的类。谢谢
    猜你喜欢
    • 2018-11-06
    • 2018-01-19
    • 2020-06-08
    • 2020-10-14
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多