我有一组打印成*.d.ts
文件的打字稿文件,但它对我来说仍然存在错误:
systems.debug.d.ts(280,41): error TS2094: The property 'Models' does not exist on value of type 'Systems'.
声明如下:
declare module Systems.Services.Stuff {
class DefaultHubService {
public Send(entry: Systems.Models.IEntry, successCallback: Function, failureCallback: Function): void;
}
}
这发生在第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的怪癖,否则它应该属于我的知识工作。任何人都可以对错误有所了解吗?
==编辑==
只是提供一些额外的信息,这有助于诊断问题...
实际实现如下:
// 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文件抛出错误。
答案 0 :(得分:1)
我在尝试您的代码时没有收到错误 - 这是我正在使用的完整示例:
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;
I tried this in the TypeScript Playground以及带有0.9.0.1 TypeScript Visual Studio扩展的Visual Studio。在Visual Studio中,我将环境声明分隔为名为systems.debug.d.ts
的文件,并在app.ts
中使用该声明。
答案 1 :(得分:1)
找出了导致它的原因!
哇,这是一个疯狂的......我不确定我完全理解它,因为我发现它是侥幸。我有一个这样的文件:
module Systems.Services.Systems
{
export class GameSystemService
{
// stuff
}
}
现在,当你在打字稿操场上尝试时(因为它和我有同样的错误),我不小心删除了这个,所有错误都消失了。然后把它放回去并尝试删除其他人并且错误仍然存在......所以我知道它必须与此有关...
现在我假设错误是因为模块名称是Systems.Services.Systems
并且在某种程度上它为此编译声明时,它会吓坏,因为它必须认为第二个Systems
与第一个相同或者什么东西..我不太确定是什么导致Typescript炸毁其他一切,但我通过将其重命名为:
module Systems.Services.GameSystems
然后一切正常。不确定这是否被归类为打字稿中的错误或我的编码问题,因为我不知道有任何问题有一个重复名称的命名空间......
无论如何修复它......疯了......感谢你的帮助!
答案 2 :(得分:0)
由于您要在多个步骤中进行编译,因此问题可能是 .d.ts
中未导出.d.ts
定义,即您说a.d.ts
为:
interface Foo{
var boo:number;
}
你有一个.d.ts文件b.ts
:
///<reference path="a.d.ts"
class Bar implements Foo{
boo:number;
}
并编译为:
tsc a.d.ts b.ts --out out.js --declaration
文件out.d.ts
里面没有接口Foo。