带有和不带有defenition文件的Typescript在同一名称空间中

时间:2013-10-03 13:40:03

标签: typescript

我在使用具有deninitions(base.d.ts)的类时遇到问题,而有些则没有,只是具有相同名称空间的Typescript类(EventDispatcher.ts)。

总而言之,我陷入了这些错误之中,因为以下是无效的语法:

declare var Acme.Ajax: AcmeAjaxInterface;

我想做什么:

我的base.d.ts文件包含:

interface AcmeInterface{
    Ajax: AcmeAjaxInterface;
}

interface AcmeAjaxInterface{
    call(...parameters: any[]);
}

我的EventDispatcher.ts包含:

module Acme {
    expost class EventDispatcher{}
}

尝试在以下文件中使用两者时:

///<reference path="base.d.ts" />
///<reference path="EventDispatcher.ts" />
Acme.Ajax.Call():

我收到错误,因为从未声明过Acme变量:

TS2094: The property 'Ajax' does not exist on value of type 'Acme'.

但是,当我添加以下内容时:

declare var Acme : AcmeInterface;

我收到错误:

TS2000: Duplicate identifier 'Acme'.

防止这些错误发生的方法是什么?

1 个答案:

答案 0 :(得分:2)

declare var Acme.Ajax: AcmeAjaxInterface;

应该是

declare module Acme {
    export var Ajax: AcmeAjaxInterface;
}

您无法在名称中使用.s定义/声明变量。 module是你把东西放在命名空间里的方式。请注意,您可以使用.s作为嵌套模块的快捷方式,例如:declare module Alpha.Bravo.Charlie { /*...*/ }