与接口同名的TypeScript类

时间:2014-10-27 15:38:26

标签: typescript

我想声明一个名为Date的类,它具有Date类型的属性(如在JavaScript Date object的TypeScript接口中。但编译器假定我的属性属于同一类型就像我要宣布的那个班级一样。我怎样才能区分这两个人?

如果Date接口在模块中,我可以使用模块名来区分,但它似乎在全局命名空间中。我的Date课程在一个模块内。

1 个答案:

答案 0 :(得分:4)

我相信没有特殊的关键字来访问全局命名空间,但以下工作:

// Create alias (reference) to the global Date object
var OriginalDate = Date;

// Make copy of global Date interface
interface OriginalDate extends Date {}

module Foo {
    export class Date {
        public d: OriginalDate; // <-- use alias of interface here
        constructor() {
            this.d = new OriginalDate(2014, 1, 1); // <-- and reference to object here
        }
    }
}

var bar = new Foo.Date();
alert(bar.d.getFullYear().toString());

另请参阅:https://github.com/Microsoft/TypeScript/blob/master/src/lib/core.d.ts

在过去,我总是将这些课程命名为&#34; DateTime&#34;避免这个问题(并可能造成混淆)。