2016-02-25 164 views
3

我已經開始與一個美麗的種子項目: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'也是如此。

回答

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以便於仍然使用該圖書館。你只是不會得到任何Typescript的好處。

+0

謝謝!有用。可以在全球某處引用它嗎? – Alexey

+0

@Alexey是的。您可以將它添加到[tsconfig.json](https:// github)的「文件」部分。com/Microsoft/TypeScript/wiki/tsconfig.json)文件。如果您使用排除語法,只要確保它不被排除。我還編輯了我的答案,提供了一個時刻類型的鏈接。 – rgvassar

+0

@rgvassar ...如果lib沒有打印機定義? – deostroll

1

編輯:將以下添加到您的main.ts文件。

import 'immutable' 

這應該給你訪問到所有組件中的歸責API,而不需要任何額外的進口。

+1

你可以建議對不包括類型庫的動作算法:如果這不通過將下面的行上的文件基礎上工作,你也可以從你的ExampleService.ts文件中引用呢? '時刻'例如? – Alexey

0

讓我舉一個可能的解決方法誰正在使用第三方(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"/>