我已经开始了一个漂亮的种子项目: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
”也是如此。
答案 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"/>