无法让 "crossroads" 在打字稿中加载为 requirejs AMD 模块

Can't get "crossroads" to load as requirejs AMD module in typescript

我正在尝试将 javascript 应用程序移植到使用 requirejs 的打字稿。我在 DefinitelyTyped 使用来自@mhegazy 的类型定义:https://github.com/borisyankov/DefinitelyTyped/tree/master/crossroads 打字稿编译器给我以下错误...

错误 TS2307:找不到外部模块 'crossroads'。

这在 javascript 中使用 "defines" 完成了所有工作。

我只是用这个库作为一个完整的例子。我错过了什么?如果 TSC 真的关注 requirejs 配置,那么文档很难挖掘。我知道十字路口取决于 js 信号。 定义和 ts 文件位于不同目录中是否存在问题? 根据我所读 here 我什至不必发表参考评论。但是如果我然后尝试使用相对路径,它也找不到它。

这是我的应用结构

申请ts/js

打字稿定义

Javascript 图书馆

index.html 包含此脚本

<script data-main="app/config" src="bower_components/requirejs/require.js>
</script>

/app/config.ts:

/// <reference path="../typings/requirejs/require.d.ts" />
(function () {
    requirejs.config({
        baseUrl: ".", 
        paths: { 
            "crossroads": "bower_components/crossroads/dist/crossroads"
        }
    })
    require(["app/bootup"]);
}) ();

/app/someclass.ts:

/// <reference path="../typings/crossroads/crossroads.d.ts" />
import crossroads = require("crossroads");

class SomeClass{
 // do something with crossroads
}

import crossroads = require("crossroads");

要使用 import/require,您需要:

  • 指向 TypeScript 文件的相对路径。
  • 一个声明的外部模块。

在您的情况下,您需要声明一个外部模块,以便 TypeScript 了解它。例如:

declare module 'crossroads'{
    export = crossroads;
} 

更新 我已经更新了定义,所以你不需要这样做:https://github.com/borisyankov/DefinitelyTyped/pull/3866享受吧!