2017-09-25 12 views
2

アイブ氏はただ活字体で実験を始めて、私は次のプロジェクト構造を持っている:私はnpm_js_module/index.jsから関数を使用する必要があります(とpm_js_module/SRCからではなく、これらはindex.jsによって必要とされている)タイプ無しJS NPMモジュールをTypeScriptでノードに使用するにはどうすればいいですか?

-src 
| index.ts 
| MyClass.ts 
-node_modules 
-npm_js_module 
| index.js 
| utils.js 
- src 
    | someModuleFile.js 
    | someModuleFile2.js 

を中MyClass.ts。このモジュールは型指定されておらず、他人がオンラインで入力することはできません。 typescriptプロジェクトで型なしのJavaScript NPMモジュールを使用することも可能ですか?

私はこのエラーを取得しています。このプロジェクトをコンパイルしようとしています:

:このような

{ 
    "compilerOptions": { 
    "moduleResolution": "node", 
    "module": "commonjs", 
    "target": "es2017", 
    "outDir": "./bin", 
    "rootDir": "./src", 
    "sourceMap": true, 
    "allowJs" : true, 
    "baseUrl" : "./", 
    "paths": { 
     "*" : ["./node_modules/@types/*", "*"] 
    } 
    }, 
    "files": [ 
    "./node_modules/@types/node/index.d.ts", 
    "./node_modules/npm_js_module/index.js" 
    ], 
    "include": [ 
    "src/**/*.ts", 
    "./node_modules/npm_js_module/*" 
    ], 
    "exclude": [ 
    "./node_modules" 
    ] 
} 

とpackage.json:

error TS6059: File '/node_modules/npm_js_module/index.js' is not under 'rootDir' '/src'. 'rootDir' is expected to contain all source files. 
error TS6059: File '/node_modules/npm_js_module/utils.js'' is not under 'rootDir' '/src'. 'rootDir' is expected to contain all source files. 

私tsconfig.jsonは、このようになります

{ 
    "name": "myproject", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1" 
    }, 
    "keywords": [], 
    "author": "", 
    "license": "ISC", 
    "devDependencies": { 
    "@types/node": "^8.0.30" 
    }, 
    "dependencies": { 
    "npm_js_module": "^1.2.3" 
    } 
} 

このモジュールをインポートするにはimport * as mymodule from 'npm_js_module';を使用しています。ここで、VScodeはこのエラーiを示していますnコード:Property 'login' does not exist on type '(loginData: any, options: any, callback: any) => void'.と私はこれをコンパイルしようとすると上記のようにエラーがあります。

+0

Iveはそのモジュールのタイピングを見つけました。皆のおかげで、必要でした。 Iveは@Willの解決策を試してみましたが、遅すぎました。 – tonakriz

答えて

2

それはクリスタルクリアではないのですが、それは、ドキュメントに埋め込まれている:

Modules

あなたは下にスクロールする場合は、ラベルされたセクションわかります 輸出=およびインポート= require()を

When importing a module using export =, TypeScript-specific import module = require("module") must be used to import the module.

そして、それは一例を示しています

import zip = require("./ZipCodeValidator"); 

これが役に立ちます。

1

あなたの問題には3つの解決策があります。通常のJavascript import jsModule = require('npm_js_module');

  • を使用して

    1. あなたのモジュールのためのダミーの定義を作成し、それを手動で含まれています。
    2. ベストウェイ:正しい定義を作成し、公式リポジトリにプルリクエストを行います。

    最初の解決方法は、通常のnode.jsモジュールとして必要です。 (ノード8.5の最新バージョンを使用している場合は特別なフラグnode --experimental-modules main.mjsを有効にしてES6のインポートスタイルを使用することができます)、それは推奨されていません。

  • 関連する問題