与接口同名的 TypeScript 类

Posted

技术标签:

【中文标题】与接口同名的 TypeScript 类【英文标题】:TypeScript class with same name as interface 【发布时间】:2014-12-22 20:22:37 【问题描述】:

我想声明一个名为 Date 的类,它具有 Date 类型的属性(如 javascript Date object 的 TypeScript 接口。但是编译器假定我的属性与 I 类的类型相同我在声明。如何区分这两者?

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

【问题讨论】:

【参考方案1】:

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

// 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

过去,我总是将此类类命名为“DateTime”以避免这个问题(以及可能的混淆)。

【讨论】:

你确定这行得通吗?在我的 TypeScript 中,我无法像这样区分命名空间名称和我的类。附言。链接失效了

以上是关于与接口同名的 TypeScript 类的主要内容,如果未能解决你的问题,请参考以下文章

Typescript Interfaces(接口)添加任意key值/内容

转载:TypeScript 简介与《TypeScript 中文入门教程》

在 TypeScript 中获取类方法的名称

TypeScript语法基础

Java中接口与接口和类之间的关系

图书TypeScript实战指南