当模块未定义为字符串时,我似乎无法让任何导入工作。到底是怎么回事?
测试.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 必须指定顶级外部模块名称。不允许使用相对的外部模块名称
我不明白不将其指定为此处和此处的字符串文字格式有何用处。如果您在///<reference...
没有字符串文字模块的情况下使用它,但我正在尝试生成依赖于这些库的 AMD 模块,所以我需要导入才能工作。我是少数,我必须去修改每个.d.ts为字符串文字版本吗?
编辑 2:
使用字符串文字声明模块要求您的导入与该字符串文字完全匹配。您不能再使用此模块/模块定义位置的相对或绝对路径,即使它与尝试导入它的文件不在同一目录中。这使得 a///<reference
和 import 是必需的,但会生成一个具有tsc --module AMD
确切查找的模块(模块的路径由模块字符串文字指示"Backbone"
)。
例如。
+- dep/
|- backbone.d.ts
|- test.ts
骨干.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']