打字稿加载模块头痛

时间:2016-10-03 23:53:05

标签: typescript module

我被困在试图理解用AMD打字的文件中的模块(我使用RequireJS);我已下载的{jQuery.d.ts类型from here在文件末尾包含以下行:

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我试图了解导入jquery模块的最正确方法。

到目前为止,我正在使用

declare module "jquery" {
  export = $;
}
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

这似乎正确加载了jquery定义类型(我在$ object上的智能感知),同时它生成了js:

import $ = require('jquery');

这样requireJs可以在需要时正确下载库。

1)我做得对吗?

official docs

  

使用export =导入模块时,必须使用TypeScript特定的import let = require(&#34; module&#34;)导入模块。

但是official lang spec说:

  

存在导入需要声明,以便与早期版本的TypeScript向后兼容。   ImportRequireDeclaration:import BindingIdentifier = require(StringLiteral);

2)语法&#34; import identifier = require(string)是否已弃用?我应该使用

define(["require", "jquery"], function(require, $) { ... }

3)official lang spec也说:

  

存在导出分配,以便与早期版本的TypeScript向后兼容。导出分配将模块成员指定为要导出的实体来代替模块本身。   ExportAssignment:export = IdentifierReference;

4)&#34; export = $;&#34;不推荐使用jquery.d.ts中的语法吗?

5)如果我想编写自己的&#34;模块&#34;,如何使用非相对方式导入它?我不想使用:

 import * as $ from 'jquery';

相反,我想使用:

 import * as mymodule from '../myfolder/mymodule';

有办法吗?我该如何申报我的模块? &#34;声明模块&#34;句法? &#34; export =&#34;句法 ?还有别的吗?

6)我是唯一一个认为这些东西(以及官方文档)真的令人困惑的人吗?

谢谢你们,伙计们。

1 个答案:

答案 0 :(得分:0)

  

我是唯一一个对这些东西(以及官方文档)感到困惑的人吗?

没有。我认为文档是错误的。我一直在做 update: function (event, ui) { var attr_id = ui.item.attr('data-id'); }

更多

我也提出了你的担忧:https://github.com/Microsoft/TypeScript/issues/11340