假设我有一个类与之前定义的类型具有相同的名称,该类在 lib.d.ts 中定义。我将如何在这个类中使用该类型。
例如,我有类 Event ,它必须处理浏览器 Event 对象,它被定义为lib.d.ts中的接口。< / p>
export class Event { // own definition of Event which hides original Event
public dealWithBrowserEvent(event: Event): void { // Event object defined by lib.d.ts
// deal with it
}
}
我如何告诉Typescript这是两种不同的类型。当然我可以简单地重命名我的课程,但我不想这样做,因为这个名字非常适合我的用例。
答案 0 :(得分:0)
您可以通过以下方式归档:
E.ts:
class CustomEvent
{
public dealWithBrowserEvent(event: Event): void
{
}
}
export default CustomEvent;
A.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)
}
}
有关声明合并的更多内容,以及可以合并的内容以及不合并的内容:link
我强烈建议你不要这样做。这段代码会让你的同事稍后阅读/修改它会引起很多困惑,更不用说无法在同一个文件标准类中使用Event了。
答案 1 :(得分:0)
与此同时,我找到了一个非常可行的解决方案。我定义了一个导出重命名接口的附加模块。如果我导入此模块,我可以使用重命名的类型,就好像它们是原始类型一样。
browser.ts
// Event will be the one from lib.d.ts, because the compiler does not know anything about
// the class Event inside this module/file.
// All defined properties will be inherited for code completion.
export interface BrowserEvent extends Event {
additionalProperty1: SomeType;
additionalProperty2: SomeType;
}
如果您不需要其他属性,只需输入别名:
browser.ts
// Alias for Event
export type BrowserEvent = Event;
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
}
}
我对此解决方案非常满意,但也许有更好的解决方案。