Typescript如何import json文件

Node.js 里面引用 json 文件很容易, 如果是 ES5 的话, 用require,如果是 ES6 的话用import。 比如 test.json 文件如下:

{
  "hello": "typescript"
}

js 代码如下:

// ES5 testjson.js
const json = require("./test.json");
console.log(json.hello);

// ES6
import * as json from "./test.json";
console.log(json.hello);

注意, Node9 以上才支持 ES6 的 import/export 机制, 且后缀名是.mjs

直接把testjson.js改为testjson.ts会报错,说[ts] Cannot find module './test.json'.

解决方案

Typescript2 支持Wildcard module declarations,很好地解决了这个问题。 添加typings.d.ts文件, 在里面配置:

declare module '*.json' {
  const value: any;
  export default value;
}
import * as json from "./test.json";
console.log(json.hello);

还会报错说没有hello

[ts] Property 'hello' does not exist on type 'typeof '*.json''.
any

可以做一次 any 转换即可:

import * as json from './test.json';
console.log((json as any).hello);

参考资料