使用TypeScript在节点应用程序中导入JSON文件

时间:2017-07-05 14:27:33

标签: typescript typescript-typings

我真的变得疯狂,因为我无法找到解决方案。 我想要归档的是将带有配置的JSON文件导入到我的TypeScript文件中。 我了解到我需要一份申报文件。所以我在我的项目中添加了一个json-loader.d.ts文件。我也尝试过几个级别(root,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"
  ]  
}

但它仍然无法奏效。有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:8)

使用declare module "*.json"的Web上的示例,因为Webpack配置为加载JSON文件。

如果您不想打扰,可以使用var代替import

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

as suggested in this answer

答案 1 :(得分:1)

我已成功使用以下内容将我的package.json导入CLI程序中(因此我可以在帮助页面中重复使用版本,许可证和描述信息)。

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

或者,您可以导入包含接口描述等的其他文件,但是您需要将导入文件放在模块声明中,例如

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

  const foo: Connection[];
  export = foo;
}

答案 2 :(得分:0)

你有没有像在网页中添加一个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>