2016-02-01 69 views
16

我剛剛使用typescript啓動了一個新的nodejs項目。我安裝了Typings(https://github.com/typings/typings),並使用它來爲節點v4.x安裝參考文件並且表示v4.x.Typescript:「找不到有效的類型的模塊」

我的節點版本是v4.2.6 我的打字稿的版本是v1.7.5

我的項目目錄由此奠定了:

package.json 
tsconfig.json 
typings.json 
src/ 
    app.ts 
typings/ 
    main.d.ts 
    main/ambient/node/node.d.ts 
    main/ambient/express/express.d.ts 

分型的內容/ main.d.ts如如下:

/// <reference path="main/ambient/express/express.d.ts" /> 
/// <reference path="main/ambient/node/node.d.ts" /> 

tsconfig.json的內容如下:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs" 
    } 
} 

內容斷typings.json如下:是

{ 
    "dependencies": {}, 
    "devDependencies": {}, 
    "ambientDependencies": { 
    "express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2", 
    "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81" 
    } 
} 

SRC/app.ts的內容如下:

'use strict'; 

///<reference path="../typings/main.d.ts"/> 

import * as express from "express"; 

這是非常簡單的,並且會導致一個基本應用。然而,當我嘗試編譯此我得到的錯誤error TS2307: Cannot find module 'express'.

我試圖重新安排分型的文件,改變了參考路徑標籤的相對路徑,使用tsconfig.json的files現場指示參考的路徑,而不是使用文件中的內聯標記,都無濟於事。我也試着直接在命令行上使用gulp-typescriptgulp-tsctsc進行編譯。

我得到類似的錯誤,當我嘗試使用建立的NodeJS式模塊,如cryptohttpfs

這些提法似乎有效 - 我缺少什麼?

+1

這一切都是有效的。分享這個項目,我會爲你尋找 – basarat

+0

甜蜜的感謝。 https://github.com/jereynolds/ts-test – aaaarrgh

+0

我只是多了一些,我注意到引用路徑註釋仍然存在於.js輸出文件中。導入語句確實被正確解析爲一個標準的'var express = require('express');'line – aaaarrgh

回答

17

三斜槓指令需要在文件中的任何語句之前。你"use strict"序幕需要拿出你的參考意見像這樣:

///<reference path="../typings/main.d.ts"/> 

'use strict'; 

import * as express from "express"; 

作爲後續行動,以您的評論在那裏你沒有得到任何發射爲您導入:那是因爲打字稿執行進口省音。除非您使用該模塊的某些值,否則編譯器將不會發出該導入,因爲它假定您只需要該模塊的類型。

+1

當我移動上面的三重斜槓時,使用strict「;」(或者刪除'「use strict」在我的編譯步驟中,我只是得到一個額外的錯誤,即無法找到main.d.ts文件,即使錯誤中給出的絕對路徑正確指向文件 – aaaarrgh

+0

我們是否需要每種類型的參考路徑正在使用?對我而言,我必須找到http-server,如果我也想使用FS,那該怎麼辦? –

+1

如果你的'tsconfig.json'引用了這些文件,或者你引用了一個像'main.d.ts'這樣的文件已經列出了它們,那麼你就不需要引用這些文件。 –

2

Daniel的答案在技術上是正確的,但根據您的tsconfig main.d.ts仍然會被拿起,所以不會爲您解決問題。

不過我確實發現問題,併發送pull請求:https://github.com/jereynolds/ts-test/pull/1


  • 你或許應該排除typingsnode_modules否則編譯會包含重複的標識(分型)/將是緩慢的(node_modules )

  • 分型安裝serve-static(需要express)和mime(需要serve-static)。

+1

「鼓勵與外部資源的鏈接,但請在鏈接上添加上下文,以便您的同行用戶瞭解它是什麼以及它爲什麼在那裏。請始終引用重要鏈接中最相關的部分,以防目標網站無法訪問或永久脫機。「 - [如何回答](http://stackoverflow.com/help/how-to-answer) –

+0

我爲'serve-static'和'mime'安裝了類型,將'typings'和'node_modules'文件夾添加到'tsconfig.json'中的排除列表中,並將'strict use「;'移到reference標籤後面。現在編譯用'tsc -p .'成功了,但是當我嘗試使用gulp來編譯時仍然失敗。任何想法爲什麼這是行不通的? – aaaarrgh

+0

@CSnover我做到了。這兩個要點是「重要鏈接的最相關部分」:) :) – basarat

1

我知道這是一個老問題,併爲它碰撞抱歉,但它作爲谷歌第一個鏈接出現。

由於上述問題沒有解決我的問題,我最終解決了這個問題,我想我會分享......在我的情況下,這是導致問題的相對路徑。

我的分型均

分型/自舉, 分型/反應-DOM, 分型/反應, 等

的反應-DOM一個具有從 '反應' 的進口。要修復我的代碼,我必須將其編輯爲'../react/react'。簡單!

相關問題