Javascript 仅使用amd中使用的环境定义导入TypeScript模块

Javascript 仅使用amd中使用的环境定义导入TypeScript模块,javascript,requirejs,typescript,amd,Javascript,Requirejs,Typescript,Amd,我有一个依赖于主干网的模块。我有一个主干.d.ts定义,但TypeScript似乎不想编译我的模块,除非 import Backbone = module("backbone") 实际上指向有效的主干模块,而不是定义文件。我正在使用AMD加载的模块,并为主干定义了requirejs垫片 /// <reference path="scripts/typings/backbone/backbone.d.ts" /> /// <amd-dependency path="backbo

我有一个依赖于主干网的模块。我有一个
主干.d.ts
定义,但TypeScript似乎不想编译我的模块,除非

import Backbone = module("backbone")
实际上指向有效的主干模块,而不是定义文件。我正在使用AMD加载的模块,并为主干定义了requirejs垫片

/// <reference path="scripts/typings/backbone/backbone.d.ts" />
/// <amd-dependency path="backbone" />

import bb = require('backbone');

interface IApi {
    version: number;
    Events: bb.Events;
}

class Api implements IApi {
    public version = 1;
    public Events: bb.Events = null;
}
除了创建假主干.ts模块定义外,还有其他解决方法吗


更新:解决方案的一个副作用是这样的代码不再有效,因为模块不再存在。因为requirejs垫片,它需要存在。我所知道的唯一解决方法是使用两个.d.ts文件。一个用于使用主干作为导入的文件,该文件不包括
声明模块
位。另一个用于使用
//的TypeScript语言自最初的答案以来发生了相当大的变化

例如,要导入一个外部模块,请使用
require
(我的原始答案使用了旧的
模块
关键字):

下面是导入主干网的一个常见用例-使用来自以下文件的类型信息:

/// <reference path="scripts/typings/backbone/backbone.d.ts" />

import bb = require('backbone');
所以原来的问题可以用…来解决

/// <reference path="scripts/typings/backbone/backbone.d.ts" />

import bb = require('backbone');

interface IApi {
    version: number;
    Events: bb.Events;
}

class Api implements IApi {
    public version = 1;
    public Events: bb.Events = null;
}

实际上还有另一种方法来处理:

  • 克隆Github存储库。它包含
    jquery.d.ts
    backbone.d.ts
    和许多其他定义文件

  • 将定义文件链接到您的
    myfile.ts
    文件:
    //

    //

  • 将amd依赖项添加到javascript库:
    //

  • 要在
    myfile.ts文件中使用
    $
    ,您现在可以调用require:
    var$=require(“jquery”)

  • 完整版本的
    myfile.ts

    /// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
    /// <reference path="DefinitelyTyped/jquery/jquery.d.ts" />
    /// <amd-dependency path="jquery"/>
    var $ = require("jquery");
    
    export function helloWorld() {
      $("<div>Hello World</div").appendTo(document.body);
    }
    

    我只是在VisualStudio中尝试这一点,并重新创建您的问题。让我看看我能不能解决这个问题!在我的测试中,我发现环境声明必须省略
    模块
    块,就像AMD或CommonJS中的普通模块一样。有趣的是,我没有看到
    之前让我摆脱了错误,谢谢!
    /// <reference path="scripts/typings/backbone/backbone.d.ts" />
    /// <amd-dependency path="backbone" />
    
    import bb = require('backbone');
    
    interface IApi {
        version: number;
        Events: bb.Events;
    }
    
    class Api implements IApi {
        public version = 1;
        public Events: bb.Events = null;
    }
    
    /// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
    /// <reference path="DefinitelyTyped/jquery/jquery.d.ts" />
    /// <amd-dependency path="jquery"/>
    var $ = require("jquery");
    
    export function helloWorld() {
      $("<div>Hello World</div").appendTo(document.body);
    }
    
    define(["require", "exports", "jquery"], function(require, exports) {
        var $ = require("jquery");
    
        function helloWorld() {
            $("<div>Hello World</div").appendTo(document.body);
        }
        exports.helloWorld = helloWorld;
    });