Ken*_*Ken 52 javascript json commonjs node.js typescript
所以代码很简单:
calls.json
{"SERVER":{
"requests":{
"one":"1"
}
} }
Run Code Online (Sandbox Code Playgroud)
file.ts
import json = require('../static/calls.json');
console.log(json.SERVER);
Run Code Online (Sandbox Code Playgroud)
生成的javascript是正确的,当运行节点js服务器时,控制台日志json.SERVER打印出'{requests:{one:'1'}}',就像它应该的那样.
但是,打字稿编译器(commonjs),不知何故并不特别喜欢这种情况并抛出:"找不到模块'../static/calls.json'".
当然我试着写一个.d.ts文件,像这样:
declare module '../static/calls.json'{
var exp:any;
export = exp;
}
Run Code Online (Sandbox Code Playgroud)
这显然会抛出:"Ambient模块声明不能指定相对模块名称".
我也尝试了不同的变体,例如:
declare module 'calls.json' {
import * as json from '/private/static/calls.json';
export = json;
}
Run Code Online (Sandbox Code Playgroud)
然后要求:
import json = require('calls.json');
Run Code Online (Sandbox Code Playgroud)
没有正常工作,并有自己的小编译器错误:)
我想使用外部.json文件,因为我使用commonjs serverside和amd clientside,我想要一个文件来加载常量.
tho*_*epo 80
用var
而不是import
.
var json = require('./calls.json');
Run Code Online (Sandbox Code Playgroud)
您正在加载JSON文件,而不是模块,因此import
在这种情况下不应使用.当var
被使用,require()
就像一个正常的功能再次处理.
如果您使用的是Node.js定义,那么一切都应该正常工作,否则require
需要定义.
iti*_*skj 25
另一个解决方案是更改data.json
为这样data.ts
并导出
export default {
"key" : {
...
}
}
Run Code Online (Sandbox Code Playgroud)
并按照您的预期导入:
import { default as data } from './data'
Run Code Online (Sandbox Code Playgroud)
sab*_*ker 21
这也可以通过使用完成import
,如果使用语句的WebPack V2这已经是挤满了JSON-装载机.
请注意,这不是异步
import data from './data.json';//Note that this is not async
Run Code Online (Sandbox Code Playgroud)
此外,在您的typings.d.ts
文件中添加以下通配符模块以避免打字稿错误说:Cannot find module
declare module "*.json" {
const value: any;
export default value;
}
Run Code Online (Sandbox Code Playgroud)
对于任何对async
进口感兴趣的人,请通过2uality查看本文
Mat*_*ner 18
TS 2.9 增加了对良好类型的json导入的支持.只需添加:
{
"compilerOptions": {
"resolveJsonModule": true
}
}
Run Code Online (Sandbox Code Playgroud)
在你tsconfig.json
或jsconfig.json
.现在进口如下:
import json = require('../static/calls.json');
Run Code Online (Sandbox Code Playgroud)
和
import * as json from '../static/calls.json';
Run Code Online (Sandbox Code Playgroud)
应该解决并有适当的打字!
归档时间: |
|
查看次数: |
51449 次 |
最近记录: |