TypeScript:用其他东西替换命名空间

TypeScript: Substitute Namespaces with something else

TSLint 抱怨不应该使用命名空间,据我所知,常识是不应该再使用它们,因为它们是特殊的 TypeScript 构造。

所以,我有一个简单的时间戳接口:

export interface Timestamp {
  seconds: number | Long;
  nanos: number;
}

由于接口中缺少静态函数,我使用名称空间来组织该功能,如下所示:

export namespace Timestamp {
  export function now(): Timestamp {
    ...
  }
}

如果没有名称空间,您将如何建模?下面的构造看起来很丑,还有别的方法吗?

export const Timestamp = {
  now: () => {
    ...
  }
}

所以,我检查了 lib.es6.d.ts,看起来 "const object" 确实是可行的方法:

interface DateConstructor {
    ...
    now(): number;
    ...
}

declare const Date: DateConstructor;

有趣的是,以下构造也有效,我认为这是 "clean" 方法:

export interface Timestamp {
  seconds: number | Long;
  nanos: number;
}

export class Timestamp {
  public static now(): Timestamp {
    ...
  }
}