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的好处。

+0

谢谢!有用。可以在全球某处引用它吗? – Alexey

+0

@Alexey是的。您可以将它添加到[tsconfig.json](https:// github)的“文件”部分。com/Microsoft/TypeScript/wiki/tsconfig.json)文件。如果您使用排除语法,只要确保它不被排除。我还编辑了我的答案,提供了一个时刻类型的链接。 – rgvassar

+0

@rgvassar ...如果lib没有打印机定义? – deostroll

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

import 'immutable' 

这应该给你访问到所有组件中的归责API,而不需要任何额外的进口。

+1

你可以建议对不包括类型库的动作算法:如果这不通过将下面的行上的文件基础上工作,你也可以从你的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"/>