我想使用与类相关的接口作为类的属性。
例如:
// 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错误,我认为我的方法是错误的。
推荐的方式是什么?
答案 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);