Как импортировать файл JSON в файл .tsx? [Дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

41
задан Ken 5 October 2015 в 14:24
поделиться

6 ответов

Используйте var вместо import.

var json = require('./calls.json');

Вы загружаете файл JSON, а не модуль, поэтому import не следует использовать в этом случае. Когда используется var, require() снова обрабатывается как нормальная функция.

Если вы используете определение Node.js, все должно просто работать, иначе require нужно будет определить .

61
ответ дан thoughtrepo 19 August 2018 в 17:37
поделиться
  • 1
    Это будет работать, хотя я использую requirejs clientside. Это означает, что при загрузке определения requirejs заявленное требование var в определении узла вызывает проблемы, поскольку требование var также было объявлено в require.d.ts ... – Ken 5 October 2015 в 15:25
  • 2
    Да, это ожидается, когда оба определения будут указаны сразу. Это также будет иметь место и во время выполнения. Вы никогда не будете использовать оба require одновременно. Быстрое решение состоит в том, чтобы этот файл не ссылался ни на один из них, и просто используйте declare var require: any;. – thoughtrepo 5 October 2015 в 15:45
  • 3
    хорошая обратная связь, я создам обходное решение ... – Ken 5 October 2015 в 15:52
  • 4
    @thoughtrepo Можете рассказать о своем ответе? Машинопись для Babel для ES5 по-прежнему ищет модуль. Я обнаружил, что в этой ситуации, и хотя отказоустойчивая интуиция будет импортировать json как var config = require('./config.json'), Typcript-Babel все еще указывает на то же сообщение об ошибке «не может найти модуль .config.json». – nunobaba 6 April 2016 в 20:29

В соответствии с TypScript 2.9 вы можете импортировать файл JSON изначально без дополнительного хакера / загрузчика.

Следующий фрагмент копируется из указанной ссылки выше.

< blockquote>

... TypeScript теперь может импортировать файлы JSON в качестве входных файлов при использовании стратегии узла для moduleResolution. Это означает, что вы можете использовать json-файлы как часть своего проекта, и они будут хорошо напечатаны!

./src/settings.json

{
    "dry": false,
    "debug": 

./src/foo.ts

import settings from "./settings.json";

settings.debug === true;  // Okay
settings.dry === 2;       // Error! Can't compare a `boolean` and `number`
2
ответ дан doomleika 19 August 2018 в 17:37
поделиться

TS 2.9 добавлена ​​поддержка хорошо введенных json import . Просто добавьте:

{
  "compilerOptions": {
    "resolveJsonModule": true
  }
}

в свои tsconfig.json или jsconfig.json. Теперь импорт, такой как:

import json = require('../static/calls.json');

и

import * as json from '../static/calls.json';

, должен быть разрешен и иметь правильные типизации!

6
ответ дан Matt Bierner 19 August 2018 в 17:37
поделиться
  • 1
    Не работает этот вопрос github – Max 9 July 2018 в 16:22
  • 2
    @Max работает для меня. Исправление было объединено с мастером 5 июля, теперь доступно в стабильном режиме. – Mihail Malostanidis 13 August 2018 в 00:13
  • 3
    это работает только в том случае, если ваша цель commonjs, если вы хотите вывести что-нибудь еще, она не будет работать – mlg87 14 August 2018 в 17:14

Другое решение - изменить data.json на data.ts и экспортировать, как это

export default {
  "key" : {
    ...
  }
}

, и импортировать, как и следовало ожидать:

import { default as data } from './data'
18
ответ дан Max 19 August 2018 в 17:37
поделиться

Это может также выполнить с помощью оператора import, если использовать webpack v2 , который уже упакован с помощью json-loader .

Обратите внимание, что это не async

import data from './data.json';//Note that this is not async

Кроме того, в вашем файле typings.d.ts добавьте следующий подстановочный модуль , чтобы избежать машинописная ошибка: Cannot find module

declare module "*.json" {
    const value: any;
    export default value;
}

Для всех, кто интересуется импортом async, проверьте эту статью на 2uality

17
ответ дан zzzzBov 19 August 2018 в 17:37
поделиться
0
ответ дан user2112373 31 October 2018 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: