8

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

另一个问题似乎指向了一个好的方向:如何避免在 Angular 2 中使用非常长的相对路径进行导入?

Typescript 2.0 似乎paths支持tsconfig.json. 有没有办法下载Typescript 2.0?我可以像使用SystemJSpath一样为配置提供一个 http url (//www.google-analytics.com/analytics.js)吗?如果没有办法下载Typescript 2.0,我如何用当前版本实现我想要的?

编辑

我得到的具体错误是:“找不到模块'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"
    ]
}
4

2 回答 2

1

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

要使用定义:

  1. 将类型定义放在您的目录中。预制的由 DeveloplyTyped提供
  2. 将此行添加到需要导入 Google Analytics 的 .ts 文件中:

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

更新

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

  1. ga在你import的 s 和 SystemJS 映射中重构。

这不会让编译器知道它需要检查 SystemJS 文件,而只是充当您导入的模块的占位符,因此不会引发错误,我们实际上可以在运行时使用 SystemJS 解析模块。

于 2016-05-10T01:26:34.583 回答
0

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

有关模块分辨率的更多信息在这里

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

declare module 'googleAnalytics' {
    export = UniversalAnalytics;
}
于 2016-05-15T20:47:53.807 回答