Typescript 类型脚本定义文件内部模块

Typescript 类型脚本定义文件内部模块,typescript,tsc,Typescript,Tsc,我有一组typescript文件,这些文件被编译成*.d.ts文件,但它对我来说总是出错: systems.debug.d.ts(280,41):错误TS2094:类型“systems”的值上不存在属性“Models”。 声明如下: declare module Systems.Services.Stuff { class DefaultHubService { public Send(entry: Systems.Models.IEntry, successCallba

我有一组typescript文件,这些文件被编译成
*.d.ts
文件,但它对我来说总是出错:

systems.debug.d.ts(280,41):错误TS2094:类型“systems”的值上不存在属性“Models”。

声明如下:

declare module Systems.Services.Stuff {
    class DefaultHubService {
        public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
    }
}
// Systems/Services/Stuff/default-hub-service.ts
module Systems.Services.Stuff {
    export class DefaultHubService {
        public Send(entry: Models.IEntry, successCallback: Function, failureCallback: Function): void
        {
            // Do something here
        }
    }
}

// Systems/Models/ientry.ts
module Systems.Models {
    export interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}
这发生在第280行(systems.debug.d.ts),它很难引用的是:

declare module Systems.Models {
    interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}
这是第239行的
(systems.debug.d.ts)
,所以我觉得很奇怪,不知道如何解决这个问题。由于接口是在服务之前包含的,所以我认为它应该是我的知识工作,除非Typescript有一些怪癖。有人能解释一下这个错误吗

==编辑==

只是提供一些额外的信息,以帮助诊断问题

实际实现如下所示:

declare module Systems.Services.Stuff {
    class DefaultHubService {
        public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
    }
}
// Systems/Services/Stuff/default-hub-service.ts
module Systems.Services.Stuff {
    export class DefaultHubService {
        public Send(entry: Models.IEntry, successCallback: Function, failureCallback: Function): void
        {
            // Do something here
        }
    }
}

// Systems/Models/ientry.ts
module Systems.Models {
    export interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}
各个文件中没有引用,因为我有一个根级别的引用文件,其中包含所有要使用的外部引用,并且由于它首先包含在编译参数中,所以它提供了所有外部依赖项(即knockout.d.ts、jquery.d.ts等)


我使用的是Typescript 0.9.0.1,通过直接从构建脚本调用tsc.exe进行编译。最后,javascript输出文件创建时没有错误,因此我有一个编译良好的
systems.debug.js
,但是使用声明标志时,只有d.ts文件会抛出错误。

我在尝试您的代码时没有遇到错误-下面是我使用的完整示例:

declare class KnockoutObservableString {}
declare class KnockoutObservableDate {}

declare module Systems.Models {
    interface IEntry {
        Version: string;
        Content: KnockoutObservableString;
        DateCreated: KnockoutObservableDate;
        CreatorAccountId: KnockoutObservableString;
    }
}

declare module Systems.Services.Stuff {
    class DefaultHubService {
        public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
    }
}

var x = new Systems.Services.Stuff.DefaultHubService();
var y: Systems.Models.IEntry;

我也在Visual Studio中使用了0.9.0.1 TypeScript Visual Studio扩展。在Visual Studio中,我将环境声明分离到一个名为
systems.debug.d.ts
的文件中,并在
app.ts

中使用该声明,因为您要分多个步骤进行编译,问题可能在于
。d.ts
定义没有导出到生成的
.d.ts
中,即,假设您已经导出了
a.d.ts
as:

interface Foo{
   var boo:number;
}
您有a.d.ts文件
b.ts

///<reference path="a.d.ts"
   class Bar implements Foo{
      boo:number; 
   }

文件
out.d.ts
中不会有接口Foo

找出原因

哇,这是一个疯狂的。。。我不确定我是否完全理解它,因为我是侥幸发现的

我有一个这样的文件:

module Systems.Services.Systems
{
    export class GameSystemService
    {
        // stuff
    }
}
现在,当我在typescript操场上试用时(因为它和我有相同的错误),我意外地删除了这个,所有的错误都消失了。然后把它放回去,试着删除其他的,错误仍然存在。。。所以我知道这一定与此有关

现在我假设错误是因为模块名是
Systems.Services.Systems
,当它为此编译声明时,它会惊慌失措,因为它必须认为第二个
Systems
与第一个相同或类似。。我不太确定是什么原因导致Typescript在其他所有东西上爆炸,但我将其重命名为:

模块系统.服务.游戏系统

然后一切顺利。我不确定这是否被归类为typescript中的一个bug或是我这边的一个编码问题,因为我不知道有任何名称空间会重复这些名称的问题


不管怎么说,这解决了它。。。疯子谢谢你们的帮助,伙计们

我不知道该告诉你什么,我编译了多个文件,当生成
*.js
文件时,
*.d.ts
文件会记录上面显示的错误,以及一些完全相同的其他错误。在模块中找到了无法找到的其他内容。为了使问题简单,我省略的唯一一件事是,我还引用了其他生成的
*.d.ts
文件(这些文件不会出错,看起来很好)。例如,
Systems
模块引用了
Shared
模块,但是Shared模块编译得很好,没有问题。有0个真正的错误,就像其中10个找不到错误一样。您使用的是TypeScript 0.9.0.1还是更早的版本?我使用的是最新版本0.9.0.1,稍后我将尝试通过TypeScript运行我的文件(在我的家用计算机上)。看看有没有什么标志。我发现另一件奇怪的事情是,实际的类实现不包含名称空间的系统部分,但声明将其放入,我看不出这样做有任何错误,但不确定这是否与它有关或是一种误导。。。如果有帮助,我将在问题中加入示例类实现。我在TypeScript游乐场中添加了一个指向我的缩短示例的链接。我在TypeScript游乐场中尝试了我的完整文件,但遇到了相同的问题(在编写了编译器将提供的缺少依赖项的声明之后),已经给出了一个答案,详细说明了潜在的问题是什么。。。即使这个错误并没有真正帮助我找到它…这就是我改变方法的原因,因为以前我有自包含的模块,它们相互渗透,所以这就是为什么我想只包含声明文件,这样它就知道类型存在,并且只希望在运行时包含它们。同样,在本例中,所有内容都具有类似名称空间的格式,因此即使在不同的文件中有两个foo类,它们也将位于不同的名称空间中。另外,我看到的具体问题是引用同一模块中的对象,该模块也在同一文件中。