web-dev-qa-db-ja.com

TypeScriptを使用してノードアプリケーションにJSONファイルをインポートする

これに対する解決策が見つからないので、本当に頭がおかしくなっています。アーカイブしたいのは、構成を含むJSONファイルをTypeScriptファイルにインポートすることです。宣言ファイルが必要だと知りました。そこで、json-loader.d.tsファイルをプロジェクトに追加しました。これは私が見つけた解決策なので、私はいくつかのレベル(ルート、typingsフォルダー、custom_typingsフォルダー)でも試してみました。ファイルの内容は次のようになります。

declare module "json!*" {
    let json: any;
    export = json;
}

declare module "*.json" {
    const value: any;
    export default value;
}

しかし、JSONファイルはモジュールではないため、インポートすることは不可能であるとコンパイラーはまだ教えてくれます。では、そのような宣言ファイルがあることをコンパイラはどのように認識していますか?

私はすでにtsconfig.jsonを次のように変更しようとしました:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "typeRoots": [
      "./node_modules/@types",
      "./typings"
    ]
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]  
}

しかし、それでも機能しません。助言がありますか?

ありがとう!

6
Patrick P.

_declare module "*.json"_を使用するWebの例は、WebpackがJSONファイルをロードするように構成されているため機能します。

気になりたくない場合は、varの代わりにimportを使用できます。

var json = require('../config.json');

この回答で提案されているように

8
tony

以下を使用して、CLIプログラム内にpackage.jsonを正常にインポートしました(これにより、ヘルプページのバージョン、ライセンス、および説明の情報を再利用できます)。

declare module '*.json' {
  const foo: {
    name: string;
    version: string;
    author: string;
    license: string;
    description: string;
  };
  export = foo;
}

または、インターフェースの説明などを含む他のファイルをインポートすることもできますが、インポートinsideモジュール宣言を配置する必要があります。

declare module 'ormconfig.json' {
  import { Connection } from "typeorm";

  const foo: Connection[];
  export = foo;
}
1
Erik Vullings

モジュールのロードを行うためにWebページにSystemJSスクリプトを追加するようなことをしましたか-index.htmlなど。私は https://cdnjs.com/libraries/systemjs とiircを使用しました が必要ですhttps://cdnjs.cloudflare.com/ajax/libs/systemjs/0.20.14/system.src.js System.JSはモジュールローダーです。最初にインポートされたスクリプトであること。そして、あなたはこのようなものが必要です:

    <script
   src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.20.14/system.src.js "/>
    <script>
       System.config({
         defaultJSExtension:true
       });
      System.import('pathtoscriptwithoutdotjsatend');
   </script>
0
JGFMK