Typescript 找不到已与 SystemJS 映射的模块

Typescript can't find a module that has been mapped with SystemJS

Typescript 在此导入中找不到模块 import ga from 'googleAnalytics';

SystemJS 知道在哪里可以找到模块,因为它已经像这样预先映射:

map: {
    '@angular': 'node_modules/@angular',
    'rxjs': 'node_modules/rxjs',
    'underscore': 'node_modules/underscore/underscore-min.js',
    'googleAnalytics': '//www.google-analytics.com/analytics.js'
},

如何提供与 tsc 类似的映射?

另一个问题似乎指向了一个好的方向:

Typescript 2.0 似乎支持 tsconfig.jsonpaths 配置。有没有办法下载Typescript 2.0?我可以像 SystemJS 一样给 path 配置一个 http url (//www.google-analytics.com/analytics.js) 吗?如果没有办法下载Typescript 2.0,我现在的版本如何实现我想要的?

编辑

我得到的具体错误是:"Cannot find module 'ga'".

这是我的 tsconfig.json:

{
    "compilerOptions": {
        "rootDir": "./",
        "target": "es5",
        "module": "system",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "noImplicitAny": true
    },
    "exclude": [
        "node_modules",
        "front-end/node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]
}

这个问题可以通过 Typescript Type Definitions 解决。

要使用定义:

  1. 将类型定义放在您的目录中。预制的由 DefinitelyTyped.
  2. 提供
  3. 将这一行添加到需要导入的.ts文件中Google分析:

    /// <reference path="ga.d.ts" />
    

更新

当我 运行 tsc 时,它确实对我有用。对不起我忘了补充:

  1. 在您的 import 和 SystemJS 映射中重构为 ga

这不会让编译器知道它需要检查 SystemJS 文件,而只是充当您导入的模块的占位符,这样就不会抛出错误,我们可以在运行时实际解析模块SystemJS.

我猜你明白,在 typescript 编译的情况下,transpiler 正在寻找明确类型的文件。他需要知道外部模块的类型定义。如果你有活动的 nodejs 模块解析(你有)并且你使用非相对路径(你有)你必须添加到你的项目 node_modules 目录(也许你已经有一个)并到这个目录添加 googleAnalytics.d.ts 文件,或者您可以创建 node_modules/googleAnalytics 目录,然后在其中添加 index.d.ts。 google 分析的定义类型可以从 DefintelyTyped repository

下载

有关模块分辨率的更多信息here

编辑:根据您的评论,您可能必须将模块导出添加到 google 定义文件

declare module 'googleAnalytics' {
    export = UniversalAnalytics;
}