Angular2-Webpack-Typescript - 第三方库

时间:2016-02-25 20:48:57

标签: typescript angular webpack immutable.js

我已经开始了一个漂亮的种子项目:https://github.com/AngularClass/angular2-webpack-starter

我一直坚持使用第三方模块。有人可以帮助/解释如何正确地为这个项目添加/使用外部模块吗?

例如,我使用:

添加'immutable'
npm install immutable --save

之后,我正在尝试将该模块链接到组件中:

import * as immutable from 'immutable';
import {List} from 'immutable';
import Immutable = require('immutable');

没有任何帮助,它总是返回TS2307:找不到模块“immutable”。例如“moment”也是如此。

3 个答案:

答案 0 :(得分:2)

您需要在项目node_modules\immutable\dist\immutable.d.ts中添加一个打字文件。您需要在项目中引用它。看起来应该是这样的:

/// <reference path="node_modules/immutable/dist/immutable.d.ts" />
import * as immutable from 'immutable';
import {List} from 'immutable';
import Immutable = require('immutable');

目前DefinitelyTyped有一些打字。我建议使用tsd进行安装。

如果您遇到一个图书馆,您想使用它找不到任何打字,您可以看到this question以便轻松使用它。你不会得到任何打字稿的好处。

答案 1 :(得分:1)

编辑:将以下内容添加到您的main.ts文件中。

import 'immutable'

这使您可以访问所有组件中的可归属api,而无需任何其他导入。

答案 2 :(得分:0)

让我为使用第三方(npm)javascript模块的人提供一个可能的解决方法,该模块没有任何打字定义,并且想要摆脱&#34;找不到模块&#34;错误消息

假设您使用npm包jsonapi-serializer并在example.ts文件中引用它:

import {Serializer, Deserializer} from "jsonapi-serializer";

@Injectable()
export class ExampleService {
  var deserializer = new Deserializer({ keyForAttribute: 'camelCase'});
}

编译器会抱怨:Error:(1, 40) TS2307:Cannot find module 'jsonapi-serializer'.

您可以通过创建以下文件来自行声明打字定义:jsonapi-serializer.d.ts。您必须指定主要功能,但使用any类型可以保持相对简单。 (如果您创建了完整的定义,请考虑donating定义文件):

declare module 'jsonapi-serializer' {

    export class Serializer {
        constructor(type: string, ...options: any[]);
        serialize(arg: any)
    }

    export  class Deserializer {
        constructor(...options: any[]);
        deserialize()
    }
}

如果将此文件放在项目中,编译器将识别该模块。如果这不起作用,您还可以通过在文件顶部放置以下行从ExampleService.ts文件中引用它:

///<reference path="jsonapi-serializer.d.ts"/>