我正在将一个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({});
这些方法的优点/缺点是什么?社区中有会议吗?
答案 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
中 - 但是如果你必须看到它,它实际上会让你更加努力地理解代码完整的命名空间,知道你在处理什么。
如果界面在SqlClient
和FooClient
之间是通用的,那么您就可以看到System.Data.IConnection
,它的嵌套程度较低且不太具体。