【发布时间】:2012-10-14 11:35:17
【问题描述】:
当模块未定义为字符串时,我似乎无法让任何导入工作。怎么回事?
test.ts
import b = module('Backbone')
不起作用: backbone.d.ts
declare module Backbone {
export class Events {
...
作品: backbone.d.ts
declare module "Backbone" {
export class Events {
...
编辑 1:
仅供参考,来自10.1.4
带有 StringLiteral 的 AmbientModuleIdentification 声明了一个外部模块。这种类型的声明只允许在全局模块中。 StringLiteral 必须指定顶级外部模块名称。不允许使用相对的外部模块名称
我不明白不将其指定为here 和here 中的字符串文字格式有什么用处。如果您在没有字符串文字模块的情况下使用///<reference...,它可以工作,但我正在尝试生成依赖于这些库的 AMD 模块,所以我需要导入才能工作。我是少数,我必须去修改每个 .d.ts 为字符串文字版本吗?
编辑 2:
使用字符串文字声明模块要求您的导入与该字符串文字完全匹配。您不能再使用相对或绝对路径指向此模块/模块定义的位置,即使它与尝试导入它的文件不在同一目录中。这使得 ///<reference 和导入是必需的,但会生成一个带有 tsc --module AMD 的模块,该模块正是正在寻找的(模块的路径由模块字符串文字 "Backbone" 指示)。
例如。
+- dep/
|- backbone.d.ts
|- test.ts
backbone.d.ts:
declare module "Backbone" {
export class Events {
作品:test.ts:
///<reference path="../dep/backbone.d.ts" />
import b = module('Backbone')
// generates
// define(["require", "exports", 'Backbone']
不起作用:test.ts:
import b = module('./dep/Backbone')
请注意,这也有效...
declare module "libs/Backbone" {
...
///<reference path="dep/backbone.d.ts" />
import b = module('libs/Backbone')
...
// generates
define(["require", "exports", 'libs/Backbone']
【问题讨论】:
-
我也很想得到一个很好的解释。几周前,我在 codeplex 提交了一个issue,主题类似。该问题已关闭,评论说这与内部和外部模块之间的差异有关,他们希望尽快改进他们的文档......
-
你可能想看看我的编辑 2 发现
-
有趣。我仍然很好奇为什么许多声明不使用字符串文字格式。
-
@ryan 如果将
backbone.d.ts修改为declare module "Backbone" {...,那么我在backbone.d.ts 中的function noConflict(): Backbone;处出现错误,说'Backbone' does not exist in current scope。
标签: javascript typescript