1

我正在并行学习 TypeScript 和 Dojo,这暴露了我对 AMD 的有限理解。我不明白如何将导入语句与第 3 方“dgrid/Grid”AMD 模块、我的 dgrid.d.ts 存根声明和我的消费类联系在一起。经过 2 天的浪费努力,我正在寻找任何方法(hacky 或 amd 最佳实践)来执行以下操作:

我的模块.ts

{
    ...
    var myGrid = new dgrid.Grid( { /*col structure*/}, "divId");
    ...
}

这是我的 dgrid 存根声明文件。

dgrid.d.ts(编辑为与下面的更新 1 同步)

module "dgrid/Grid"
{
    export class Grid
    {
        constructor ( gridStructure: any, elementId: string);
    }
}

我在使用 TypeScript 类中尝试了以下引用,但 Visual Studio 用红色强调了“dgrid/Grid”文字,因为我猜 TS 编译器不知道 default.htm 文件中的经典 Dojo dojoConfig、baseUrl 和 dgrid 包声明。

///<reference path='dgrid.d.ts' />

import Grid = module("dgrid/Grid");

module MyModule
{
   ...
}

更新 1 自发布以来,我通读了官方 TypeScript 手册中的第 10 章。以前我未能认识到声明为模块 MyType{} 或模块“外部/第三方”{} 的模块的重要性。外部模块的环境声明应该是文字。

背景:

要求声明:

require(["dgrid/Grid", "dojo/domReady!"],
    function(Grid){
4

2 回答 2

1

您的代码的以下(略有更改)版本对我来说编译得很好:

我的模块.ts

///<reference path='./dgrid.d.ts' />
module MyModule {
    var gridInstance : dgrid.Grid = new dgrid.Grid("test1", "test2");
}

dgrid.d.ts

module dgrid
{
    class Grid
    {   
        constructor ( gridStructure: any, elementId: string);
    }   

}

///<reference path='...'/>构造将内部模块dgrid带入范围。使用模块名称作为类型名称的前缀可以完成这项工作。

于 2012-10-11T14:45:18.347 回答
0

我的第一个想法是检查文件是否位于您认为该语句起作用的位置:

///<reference path='dgrid.d.ts' />

该文件是否dgrid.d.ts与您的模块 .ts 文件位于同一文件夹中?

更新:

如果你的模块声明是:

module dgrid {
    export class Grid {
        constructor ( gridStructure: any, elementId: string) {

        }
    }
}
于 2012-10-11T13:52:32.690 回答