我正在学习TypeScript和Dojo,这暴露了我对AMD的有限理解。我不明白如何将import语句绑定到第三方“dgrid / Grid”AMD模块,我的dgrid.d.ts存根声明和我的消费类。经过2天的浪费,我正在寻找任何方法(hacky或amd最佳实践)来执行以下操作:
MyModule.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 {}或模块“external / thirdparty”{}的模块的重要性。外部模块的环境声明应该是文字。
背景
要求声明:
require(["dgrid/Grid", "dojo/domReady!"],
function(Grid){
答案 0 :(得分:1)
您的代码的以下(略微更改)版本对我来说很好:
<强> MyModule.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
纳入范围。使用模块名称作为类型名称的前缀可以完成工作。
答案 1 :(得分:0)
我的第一个问题是检查文件是否在您认为该语句可用的位置:
///<reference path='dgrid.d.ts' />
dgrid.d.ts
文件与模块.ts文件位于同一文件夹中吗?
<强>更新强>
你的模块声明应该是:
module dgrid {
export class Grid {
constructor ( gridStructure: any, elementId: string) {
}
}
}