Не вдалося знайти ім'я "вимагати" після оновлення до Angular4


120

Я хочу використовувати Chart.js в рамках свого проекту Angular. У попередніх версіях Angular2 я робив це добре, використовуючи 'chart.loader.ts', який має:

export const { Chart } = require('chart.js');

Тоді в коді компонента я просто

import { Chart } from './chart.loader';

Але після оновлення до cli 1.0.0 та Angular 4 я отримую помилку: "Неможливо знайти ім'я" вимагаю "".

Щоб відтворити помилку:

ng new newapp
cd newapp
npm install chart.js --save
echo "export const { Chart } = require('chart.js');" >> src/app/chart.loader.ts
ng serve

У своєму "tsconfig.json" у мене є

"typeRoots": [
  "node_modules/@types"
],

І в 'node_modules/@types/node/index.d.ts' є:

declare var require: NodeRequire;

Тож я розгублений.

До речі, я постійно стикаюся з попередженням:

[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)

Хоча я встановив "префікс": "" у своєму ".angular-cli.json". Чи може це через те, що зміна з 'angular-cli.json' на '.angular-cli.json'?


Проблема полягає у вашому файлі tsconfig.json. Дивіться рішення тут: stackoverflow.com/questions/31173738 / ...
IndyWill

@IndyWill Спасибі, насправді це має бути в src / tsconfig.app.json. Чи можете ви написати це як відповідь?
Thomas Wang

Для електрона + кутова 2/4 см: stackoverflow.com/a/47364843/5248229
mihaa123

Відповіді:


232

Проблема (як зазначено в помилці отримання типового сценарію TS2304: не можна знайти ім'я 'вимагати' ) полягає в тому, що визначення типів для вузла не встановлені.

Для прогнозованого генерування with @angular/cli 1.xконкретні кроки повинні бути:

Крок 1 :

Встановіть за @types/nodeдопомогою одного з наступного:

- npm install --save @types/node
- yarn add @types/node -D

Крок 2. Відредагуйте файл src / tsconfig.app.json і замість порожнього додайте наступне "types": []:

...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...

Якщо я щось пропустив, додайте коментар, і я відредагую свою відповідь.


11
добре не працював для мене ... чи потрібно мені встановлювати щось інше?

1
Також для мене це не працює. Подробиці тут: stackoverflow.com/questions/44421367/types-not-found
user3471528

49
Примітка: Ви повинні змінити tsconfig.app.jsonпід srcпапку , додавши "types": ["node"], що це не в кореневому TSconfig
BrunoLM

11
Не працював і для мене. ще одна відповідь, яка пропонує просто додати, declare var require: any;допомогла напрочуд.
Парітош

Я пропустив крок 2. Дякую !!
Роббі Сміт

25

Нарешті я отримав рішення для цього, перевірте свій файл модуля програми:

import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from '@angular/material';
import 'hammerjs';
import { ChartModule } from 'angular2-highcharts';
import * as highcharts from 'highcharts';
import { HighchartsStatic } from 'angular2-highcharts/dist/HighchartsService';

import { AppRouting } from './app.routing';
import { AppComponent } from './app.component';

declare var require: any;


export function highchartsFactory() {
      const hc = require('highcharts');
      const dd = require('highcharts/modules/drilldown');
      dd(hc);

      return hc;
}

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    AppRouting,
    BrowserAnimationsModule,
    MaterialModule,
    ChartModule
  ],
  providers: [{
      provide: HighchartsStatic,
      useFactory: highchartsFactory
    }],
  bootstrap: [AppComponent]
})
export class AppModule { }

Зверніть увагу declare var require: any;на наведений вище код.


1
У мене виникла ця проблема у файлі polyfills.ts, але ваш "оголосити var потрібно: будь-який;" виправили це. дякую
Андре

18

Працюватиме в Angular 7+


Я зіткнувся з тим же питанням, додав я

"types": ["node"]

до tsconfig.json кореневої папки.

Був ще один tsconfig.app.json в папці src, і я вирішив це, додавши

"types": ["node"]

до файлу tsconfig.app.json підcompilerOptions

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["node"]  ----------------------< added node to the array
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

14

Як на мене, використовуючи VSCode та Angular 5, потрібно було лише додати «вузол» до типів у tsconfig.app.json. Збережіть і перезавантажте сервер.

{
    "compilerOptions": {
    ..
    "types": [
      "node"
    ]
  }
  ..
}

Цікавим є те, що ця проблема "не може знайти вимагає (", не буває при збудженні з ts-вузлом


1
Працював як шарм у кутовій 6 для мене.
Пік Міккель

Це рішення працювало для мене в бібліотеці Angular 6. Мені потрібно додати "types": [ "node" ],до tsconfig.lib.jsonхоча.
Гас

І РЕСТАРТ-СЕРВЕР. Боже, все це було так. Робота над кутовим 9. 👍
Anders8

13

Ще не впевнений у відповіді, але можливе вирішення

import * as Chart from 'chart.js';

3

я додав

"types": [ 
   "node"
]

у моєму файлі tsconfig, і його працює для мене файл tsconfig.json

  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": [ 
      "node",
      "underscore"
    ]
  },  

Хоча цей код може відповісти на запитання, ви все ж можете розглянути питання про додавання кількох пояснювальних речень, оскільки це збільшує значення вашої відповіді для інших користувачів.
MBT


0

Я перемістив tsconfig.jsonфайл у нову папку для реструктуризації свого проекту.

Тож не вдалося вирішити шлях до папки node_modules / @ types всередині typeRootsвластивості tsconfig.json

Тож просто оновіть шлях від

"typeRoots": [
  "../node_modules/@types"
]

до

"typeRoots": [
  "../../node_modules/@types"
]

Щоб просто переконатися, що шлях до node_modules буде вирішено з нового місця розташування tsconfig.json

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.