typescript如何导入JSON文件

在项目中需要导入json数据作为对象使用
但是在ts中一直会报错

方式1:最开始的解决方案是在根目录建立一个typings.d.ts

// typings.d.ts
declare module "*.json" {
    const value: any;
    export default value;
}

这种方法可以使用,但是会报错

import * as root from '../mock/stocklist_1d.json'
console.log(root ) // ok
console.log(root.chartlist) //ts编译报错

方式2:改成下面的方式。但是还是不成功

stock_list_1d.d.ts文件是通过下面的连接生成的
http://www.json2ts.com/#

求老司机带路

// index.ts
import root from '../mock/stocklist_1d.json';
console.log(root);
// stock_list_1d.d.ts
export interface Stock {
    symbol: string;
}

export interface Chartlist {
    volume: number;
    avg_price: number;
    current: number;
    time: string;
}

export interface RootObject {
    stock: Stock;
    success: string;
    chartlist: Chartlist[];
}

const root: RootObject;
export default root;
// stock_list_1d.json
{
    "stock": {
        "symbol": "SH601009"
    },
    "success": "true",
    "chartlist": [
        {
            "volume": 359800,
            "avg_price": 11.87,
            "current": 11.87,
            "time": "Thu Mar 16 09:30:00 +0800 2017"
        },
        {
            "volume": 78300,
            "avg_price": 11.87,
            "current": 11.89,
            "time": "Thu Mar 16 09:31:00 +0800 2017"
        }
    ]
}
阅读 26.4k
4 个回答

import 导入的是一个模块,对于JSON很明显不适用。

其实很简单,可以采用 node 加载方式:

const data = require('../mock/stocklist_1d.json');

如果是node项目,请用fs.readfile加载json,如果是browser项目,请用ajax请求加载json。
或者就直接用ts export一个let出来指向和json格式一致的一个object

import * as root from '../mock/stocklist_1d.json'
console.log(root )
console.log((<any>root).chartlist)  // <---------
新手上路,请多包涵
// typings.d.ts
declare module '*.json'

我这样写可以用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏