Uncaught TypeError: Невозможно прочитать свойство 'tb' из неопределенного - PullRequest
0 голосов
/ 11 июня 2019

Во время работы приложения я получил ошибку в объявлении файла constants.ts (присвоение данных файла json константным переменным.) Файла.

Я объявил некоторые данные в json файле, как object.json.

{
 "furniture": {
     "tb": {
         "value": "table",
         "display": "Table(s)"
      },
      "ch": {
        "value": "chair",
        "display": "Chair(s)"
     }
 },
 "furnitureTypes": [
    {
     "value": "LivingRoomSofa",
     "display": "Living Room Sofa"
    },
    {
     "value": "CoffeeTable",
     "display": "Coffee Table"
    },
   {
    "value": "AccentCabinet",
    "display": "Accent Cabinet"
   }
 ],
"boardes": [
      {
       "value": null,
       "display": "--"
      },
      {
       "value": "Blockboard",
       "display": "Block board"
      },
      {
       "value": "Foamboard",
       "display": "Foam board"
      },
      {
       "value": "Fiberboard",
       "display": "Fiber board"
      }
  ]
}

Затем я создал один файл constants.ts и импортировал указанный выше файл json.

import * as objData from './objects.json';

В этом файле constants.ts

import * as objData from './objects.json';

const obj = <any>objData;

console.log('obj---:',obj);

export const Constants = { farr : [obj.furniture.tb, obj.furniture.ch]; }

Запустите проект, и я получил ошибку.

Невозможно прочитать свойство 'tb' из неопределенного в Module ../ src / app / shared / constants.ts

Это журнал консоли показывает:

obj-- Модуль {по умолчанию: {…}, __esModule: true, Symbol (Symbol.toStringTag): "Модуль"}

почему он получает Module и добавляет ключ default, но на самом деле он показывает прямой json object data.

что я говорю, что: Мне нужно вот так: json object.

json-obj----------: 
  {farr: Array(2),furnitureTypes: Array(3), boardes: Array(4), …}
   boardes: (4) [{…}, {…}, {…}, {…}]
  farr: (2) [{…}, {…}]
  furniture: {tb: {…}, ch: {…}}
  furnitureTypes: (3) [{…}, {…}, {…}]
  __proto__: Object

Здесь я могу получить прямой доступ как obj.tarr.a and obj.tripTypes[0]

Но в моем сценарии в журнале консоли это выглядит так:

obj---: 
 Module {default: {…}, __esModule: true, Symbol(Symbol.toStringTag): 
 "Module"}
default:
   boardes: (4) [{…}, {…}, {…}, {…}]
   furniture: {tb: {…}, ch: {…}}
   furnitureTypes: (3) [{…}, {…}, {…}]
   __proto__: Object
   Symbol(Symbol.toStringTag): "Module"
   __esModule: true

Здесь это выглядит как Module, а не Object.

Как я могу получить его как Object?

Может кто-нибудь помочь мне решить проблему?

1 Ответ

1 голос
/ 11 июня 2019

Сначала необходимо создать имя файла с расширением .ts (example.ts) и в этом example.ts file

export default {
  "furniture": {
    "tb": {
      "value": "tables",
      "display": "Table(s)"
    },
    "ch": {
      "value": "chairs",
      "display": "Chair(s)"
    }
  }
}

и вам нужно импортировать этот файл в ваш компонент

import obj from './example';

Демонстрационная версия

это будет работать как ваше ожидание

...