Class TypeScript:访问本地类定义隐藏的全局类型?

Class TypeScript:访问本地类定义隐藏的全局类型?,class,typescript,global,typescript1.8,Class,Typescript,Global,Typescript1.8,让我们假设我有一个类,它与lib.d.ts中定义的先前定义的类型具有相同的名称。我将如何在这个类中使用该类型 例如,我有一个类Event,它必须处理browsers事件对象,该对象在lib.d.ts中定义为接口 导出类事件{//隐藏原始事件的事件的自身定义 public dealWithBrowserEvent(event:event):由lib.d.ts定义的void{//event对象 //处理它 } } 我如何告诉Typescript这是两种不同的类型。当然,我可以简单地重命名我的类,但

让我们假设我有一个类,它与lib.d.ts中定义的先前定义的类型具有相同的名称。我将如何在这个类中使用该类型

例如,我有一个类Event,它必须处理browsers事件对象,该对象在lib.d.ts中定义为接口

导出类事件{//隐藏原始事件的事件的自身定义
public dealWithBrowserEvent(event:event):由lib.d.ts定义的void{//event对象
//处理它
}
}

我如何告诉Typescript这是两种不同的类型。当然,我可以简单地重命名我的类,但我不想这样做,因为这个名称非常适合我的用例。

您可以通过这样做来存档它:

E.ts:

答:

更多关于声明合并以及可以合并和不可以合并的内容:


我强烈建议你不要这样做。这段代码会给以后阅读/修改它的同事带来很多困惑,更不用说不能在事件的同一个文件标准类中使用它了。

与此同时,我找到了一个非常可行的解决方案。我定义了一个附加模块,用于导出重命名的接口。如果导入此模块,我可以使用重命名的类型,就像它们是原始类型一样

browser.ts

//事件将是lib.d.ts中的事件,因为编译器不知道关于
//此模块/文件中的类事件。
//所有定义的属性都将被继承以完成代码。
导出接口BrowserEvent扩展事件{
附加属性1:某种类型;
附加属性2:某种类型;
}
如果不需要其他属性,只需执行类型别名:

browser.ts

//事件的别名
导出类型BrowserEvent=事件;
event.ts

import {BrowserEvent} from './browser.ts';

export class Event { // Definition of Event hides original Event, but not BrowserEvent

  public dealWithBrowserEvent(event: BrowserEvent): void {
    // deal with it
  }

}

我对这个解决方案很满意,但也许还有更好的解决方案。

我试着这样做。但最后,我对类型检查期间方法参数的类型错误感到不高兴。它还破坏了IDE内部的自动完成功能。JavaScript/TypeScript在名称冲突方面存在一些严重问题:(您可以使用
type BrowserEvent=Event
来别名它。对。这也是一个选项,在我的演示中更可取。定义一个接口或多或少都是这样,但也允许添加lib.d.ts可能没有定义的其他属性。我将更新我的答案。我建议使用名称空间,因为它们就是名称空间're for(即消除名称歧义)。我不知道TypeScript会支持名称空间的真实概念。lib.d.ts中定义的类型没有名称空间,我正在编写的代码已经在我自己的“名称空间”中了/这就是为什么我会有这个名称冲突。使用名称空间的解决方案会是什么样子?类似于
module My.Namespace{export class Event{…
然后您可以通过
My.Namespace.Event
指定您的事件类。这就是我正在做的。我的事件类已经在名为“xyz/Event”的模块中。我可以从其他地方访问这个类xyz.Event.Event,但我在使用类型Event(在lib.d.ts中没有命名空间定义)时遇到问题在类事件内部,因为名称冲突。好的,这些信息不在问题中,所以我不知道。似乎你应该给你的类命名其他名称。。。。
import Event from './E'

export class SomeClass 
{ 
    //Parameter e here is instance of your CustomEvent class
    public someMethod(e: Event): void 
    { 
        let be: any;
        //get browser event here
        e.dealWithBrowserEvent(be)
    }
}
import {BrowserEvent} from './browser.ts';

export class Event { // Definition of Event hides original Event, but not BrowserEvent

  public dealWithBrowserEvent(event: BrowserEvent): void {
    // deal with it
  }

}