5

当模块未定义为字符串时,我似乎无法让任何导入工作。到底是怎么回事?

测试.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']
4

1 回答 1

1

当你写这个:

declare module Backbone {

这意味着您已经有一个位于全局范围内的模块(因此您可以立即使用它,不需要导入)。但是当你写这个时:

declare module "Backbone" {

这意味着您指定导入的模块 (import ... = module("...")) 的外观。

于 2012-10-24T12:32:48.090 回答