所以代码很简单:
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;
}
这显然会抛出:“Ambient模块声明不能指定相对模块名称” .
我也尝试了不同的变体,例如:
declare module 'calls.json' {
import * as json from '/private/static/calls.json';
export = json;
}
然后要求:
import json = require('calls.json');
没有正常工作,并有自己的小编译器错误:)
我想使用外部.json文件,因为我使用commonjs serverside和amd clientside,我想要一个文件来加载常量 .
6 回答
TS 2.9 added support for well typed json imports . 只需添加:
在你的
tsconfig.json
或jsconfig.json
. 现在进口如下:和
应该解决并有适当的打字!
另一个解决方案是将
data.json
更改为data.ts
并像这样导出并按预期导入:
如果使用已经用json-loader打包的webpack v2,也可以使用
import
语句来完成此操作 .另外,在
typings.d.ts
文件中添加以下wildcard module以避免打字稿错误说:Cannot find module
对于对
async
进口感兴趣的任何人,请检查this article by 2uality从Typescript 2.9开始,您可以本机导入JSON文件,而无需任何额外的hack / loader .
以下摘录从上述链接复制而来 .
./src/settings.json
./src/foo.ts
使用
var
而不是import
.您正在加载JSON文件,而不是模块,因此在这种情况下不应使用
import
. 使用var
时,require()
再次被视为普通函数 .如果您正在使用Node.js定义,那么一切都应该正常工作,否则需要定义
require
.