TypeScript:组织相关课程&接口

时间:2015-03-10 15:59:48

标签: typescript

我正在将一个JavaScript项目移植到TypeScript,我不确定如何组织相关实体(类型/接口/类)。

以下是我正在考虑的不同方法。

使用类名

添加前缀
interface IFooOptions {}

class Foo {
  constructor(options: IFooOptions) {}
}

// usage
var foo = new Foo({});

创建模块:

module Foo {
  export interface IOptions {
    // ...
  }

  export class Foo {
    constructor(options: IOptions) {}
  }
}

// usage
var foo = new Foo.Foo({});

创建具有工厂功能的模块:

module Foo {
  export interface IOptions {
    // ...
  }

  export class Foo {
    constructor(options: IOptions) {}
  }

  export function create(options: IOptions): Foo {
    return new Foo(options);
  }
}

// usage
var foo = Foo.create({});

这些方法的优点/缺点是什么?社区中有会议吗?

1 个答案:

答案 0 :(得分:1)

对于内部模块,它看起来像这样:

module Foo {
  export interface FooOptions {
    // ...
  }

  export class Foo {
    constructor(options: FooOptions) {}
  }
}

// usage
var foo = new Foo.Foo({
    //...
});

不鼓励在接口上使用I前缀(尽管它确实存在)。

接口名称的特殊性来自于名称应该更深入的原则。所以你开始一般并且更具体,有点像C#中的这个例子(在C#中,建议接口使用I前缀,但它是一个名义类型的系统,而TypeScript是结构的)......

System.Data.SqlClient.SqlConnection
System.Data.FooClient.FooConnection

请注意,他们 可以使用Connection,因为它嵌套在SqlClient中 - 但是如果你必须看到它,它实际上会让你更加努力地理解代码完整的命名空间,知道你在处理什么。

如果界面在SqlClientFooClient之间是通用的,那么您就可以看到System.Data.IConnection,它的嵌套程度较低且不太具体。