如何导出嵌套接口?

时间:2018-01-15 07:56:54

标签: typescript tslint

我想使用与类相关的接口作为类的属性。

例如:

// file a.ts
// TODO how to export Options?
interface Options {
  ...
}


export default class A {
  constructor(options: A.Options) {
    ...
  }
}

// file b.ts
import A from 'a';

const options: A.Options = ...; // A.Options is the desired usage

const a = new A(options);    

我只使用declare namespace来实现这一点。以下代码段允许我使用A.Options

// file a.ts
declare namespace A {
  interface Options {
    ...
  }
}

class A {
  constructor(options: A.Options) {
    ...
  }
}

export default A;

但是使用该解决方案recommended tslint rule" no-namespace"抱怨它。我可以允许declare namespace使用额外的tslint选项"allow-declarations"

由于tslint错误,我认为我的方法是错误的。

推荐的方式是什么?

1 个答案:

答案 0 :(得分:0)

我认为您应该检查相关的Typescript handbook引用。

  

主要区别在于模块声明了它们的依赖关系。

原因:

  

从ECMAScript 2015开始,模块是该语言的本机部分,并且应该得到所有兼容引擎实现的支持。因此,对于新项目,模块将是推荐的代码组织机制。

以您的示例为例,我建议如下:

// file a.ts
export interface Options {
  // ...
}

export class A {
    constructor(options: Options) {
    }
}

// file b.ts
import {A, Options as OptionsForClassA} from "./a";

const options: OptionsForClassA = { ... };

const a = new A(options);