导入json文件时的Typescript编译器错误
所以代码很简单:
calls.json
{"SERVER":{ "requests":{ "one":"1" } } }
file.ts
import json = require('../static/calls.json'); console.log(json.SERVER);
生成的javascript是正确的,并且在运行节点js服务器时,控制台日志json.SERVER会打印“{requests:{one:'1'}}”。
打字稿编译器(commonjs)不过,不知何故并不特别喜欢这种情况,并抛出:“找不到模块”../static/calls.json'“。
当然,我试图写一个.d.ts文件,如下所示:
declare module '../static/calls.json'{ var exp:any; export = exp; }
这显然会抛出:“环境模块声明不能指定相对模块名称”。
我也尝试了不同的变体,如:
declare module 'calls.json' { import * as json from '/private/static/calls.json'; export = json; }
然后要求:
import json = require('calls.json');
没有正常工作,并有自己的小编译器错误:)
我想使用一个外部.json文件,因为我使用commonjs serverside和amd clientside,我想单个文件加载常量。
使用var
而不是import
。
var json = require('./calls.json');
你正在加载一个JSON文件,而不是一个模块,所以不应该使用import
是这种情况。 当使用var
, require()
被再次视为正常函数。
如果你使用的是Node.js定义,一切都应该正常工作,否则require
定义。
这也可以通过使用import
语句来完成,如果使用已经与json-loader一起打包的webpack v2 。
请注意,这不是asynchronous
import data from './data.json';//Note that this is not async
此外,在typings.d.ts中添加以下通配符模块,以避免typecript错误说: Cannot find module
declare module "*.json" { const value: any; export default value; }
对于任何对async
导入感兴趣的人,请查看这篇文章
另一个解决scheme是将data.json
更改为data.ts
并像这样导出
export default { "key" : { ... } }
并按照您的预期进行导入:
import * as data from './data.ts'