ไม่พบชื่อ 'ต้องการ' หลังจากอัปเกรดเป็น 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;

ฉันก็เลยสับสน

BTW ฉันพบคำเตือนอยู่ตลอดเวลา:

[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

ปัญหา (ตามที่ระบุไว้ในtypescript รับข้อผิดพลาด 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;ช่วยได้อย่างน่าประหลาดใจ
Paritosh

ฉันพลาดขั้นตอนที่ 2 ขอบคุณ !!
Robbie Smith

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 ต้องใช้: any;" ซ่อมมัน. ขอบคุณ
Andre

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-node


1
ทำงานอย่างมีเสน่ห์ใน Angular 6 สำหรับฉัน
Pic Mickael

วิธีนี้ใช้ได้ผลสำหรับฉันในไลบรารี Angular 6 ฉันต้องการเพิ่ม"types": [ "node" ],เข้าไปในtsconfig.lib.jsonแม้ว่า
กัส

และรีสตาร์ทเซิร์ฟเวอร์ ความดีของฉันมันเป็นอย่างนี้มาตลอด ทำงานกับ Angular 9. 👍
Anders8


3

ฉันเพิ่ม

"types": [ 
   "node"
]

ในไฟล์tsconfigของฉันและมันใช้งานได้สำหรับฉันไฟล์tsconfig.jsonดูเหมือน

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

แม้ว่ารหัสนี้อาจตอบคำถาม แต่คุณอาจพิจารณาเพิ่มประโยคอธิบาย 2-3 ประโยคเนื่องจากจะเป็นการเพิ่มมูลค่าคำตอบสำหรับผู้ใช้รายอื่น
MBT


0

ฉันย้ายtsconfig.jsonไฟล์ไปไว้ในโฟลเดอร์ใหม่เพื่อปรับโครงสร้างโครงการของฉัน

ดังนั้นจึงไม่สามารถแก้ไขเส้นทางไปยังโฟลเดอร์ node_modules / @ types ภายในtypeRootsคุณสมบัติของ tsconfig.json

ดังนั้นเพียงอัปเดตเส้นทางจาก

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

ถึง

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

เพื่อให้แน่ใจว่าพา ธ ไปยัง node_modules ได้รับการแก้ไขจากตำแหน่งใหม่ของ tsconfig.json

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.