Angular2-的WebPack-打字稿 - 第三方库
我已经开始与一个美丽的种子项目:https://github.com/AngularClass/angular2-webpack-starterAngular2-的WebPack-打字稿 - 第三方库
而且我一直坚持使用第三方modules.Can有人帮助/解释如何正确添加/使用这个项目的外部模块?
例如,我加入“一成不变”使用:
npm install immutable --save
在那之后,我想该模块链接一个组件内:
import * as immutable from 'immutable';
import {List} from 'immutable';
import Immutable = require('immutable');
没有什么帮助,它总是返回TS2307:找不到模块'immutable
'。例如,'moment
'也是如此。
您需要添加到位于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以便于仍然使用该图书馆。你只是不会得到任何Typescript的好处。
编辑:将以下添加到您的main.ts文件。
import 'immutable'
这应该给你访问到所有组件中的归责API,而不需要任何额外的进口。
你可以建议对不包括类型库的动作算法:如果这不通过将下面的行上的文件基础上工作,你也可以从你的ExampleService.ts
文件中引用呢? '时刻'例如? –
Alexey
让我举一个可能的解决方法谁正在使用第三方(NPM)的JavaScript模块,其中有没有分型的定义,并希望摆脱“无法找到模块”错误消息的人
假设你使用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()
}
}
如果你把你的项目,编译器将识别模块文件。
///<reference path="jsonapi-serializer.d.ts"/>
谢谢!有用。可以在全球某处引用它吗? – Alexey
@Alexey是的。您可以将它添加到[tsconfig.json](https:// github)的“文件”部分。com/Microsoft/TypeScript/wiki/tsconfig.json)文件。如果您使用排除语法,只要确保它不被排除。我还编辑了我的答案,提供了一个时刻类型的链接。 – rgvassar
@rgvassar ...如果lib没有打印机定义? – deostroll