Angular และ Typescript: ไม่พบชื่อ


221

ฉันใช้ Angular (รุ่น 2) กับ TypeScript (รุ่น 1.6) และเมื่อฉันรวบรวมรหัสฉันได้รับข้อผิดพลาดเหล่านี้:

Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/change_detection/parser/locals.d.ts(4,42): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(1,25): Error TS2304: Cannot find name 'MapConstructor'.
    node_modules/angular2/src/core/facade/collection.d.ts(2,25): Error TS2304: Cannot find name 'SetConstructor'.
    node_modules/angular2/src/core/facade/collection.d.ts(4,27): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(4,39): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(7,9): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(8,30): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(11,43): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(12,27): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(14,23): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(15,25): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/collection.d.ts(94,41): Error TS2304: Cannot find name 'Set'.
    node_modules/angular2/src/core/facade/collection.d.ts(95,22): Error TS2304: Cannot find name 'Set'.
    node_modules/angular2/src/core/facade/collection.d.ts(96,25): Error TS2304: Cannot find name 'Set'.
    node_modules/angular2/src/core/facade/lang.d.ts(1,22): Error TS2304: Cannot find name 'BrowserNodeGlobal'.
    node_modules/angular2/src/core/facade/lang.d.ts(33,59): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/facade/promise.d.ts(1,10): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(3,14): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(8,32): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(9,38): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(10,35): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(10,93): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(11,34): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(12,32): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(12,149): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/facade/promise.d.ts(13,43): Error TS2304: Cannot find name 'Promise'.
    node_modules/angular2/src/core/linker/element_injector.d.ts(72,32): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/element_injector.d.ts(74,17): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/element_injector.d.ts(78,184): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/element_injector.d.ts(83,182): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/element_injector.d.ts(107,37): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/proto_view_factory.d.ts(27,146): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(52,144): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(76,79): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(77,73): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(94,31): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(97,18): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(100,24): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(103,142): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/linker/view.d.ts(104,160): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/render/api.d.ts(281,74): Error TS2304: Cannot find name 'Map'.
    node_modules/angular2/src/core/zone/ng_zone.d.ts(1,37): Error TS2304: Cannot find name 'Zone'.

นี่คือรหัส:

import 'reflect-metadata';
import {bootstrap, Component, CORE_DIRECTIVES, FORM_DIRECTIVES} from 'angular2/core';
@Component({
  selector: 'my-app',
  template: '<input type="text" [(ng-model)]="title" /><h1>{{title}}</h1>',
  directives: [ CORE_DIRECTIVES ]
})
class AppComponent {
  title :string;

  constructor() {
    this.title = 'hello angular 2';
  }
}
bootstrap(AppComponent);

ดูเหมือนว่ามีปัญหาสำหรับที่นี่github.com/angular/angular/issues/4902
ปล้น

ลองเพิ่มการนำเข้าต่อไปนี้import {ROUTER_PROVIDERS} from 'angular2/router';ฉันได้รับปัญหาเดียวกันและด้วยเหตุผลบางอย่างนี้แก้ไขได้สำหรับฉัน ... ?!?
ปล้น

คำตอบ:


52

ปัญหาที่ทราบ: https://github.com/angular/angular/issues/4902

เหตุผลหลัก: .d.tsไฟล์ที่ระบุโดย TypeScript นั้นแตกต่างกันไปตามเป้าหมายของการคอมไพล์ดังนั้นจึงจำเป็นต้องมีการประกาศที่ล้อมรอบมากขึ้นเมื่อกำหนดเป้าหมายes5แม้ว่าสิ่งที่มีอยู่จริงใน runtimes (เช่น chrome) เพิ่มเติมเกี่ยวกับlib.d.ts


446
แล้วทางออกคืออะไร?
user233232

3
2.0.0-alpha.45 ดีใช้การพิมพ์จาก node_modules / angular2 / bundles / typings / ** / *. d.ts
Are Butuv

2
"angular2": "2.0.0-beta.3" ใช้งานได้ แต่ beta.4 และ beta.5 ดูเหมือนจะมีปัญหานี้อีกครั้งอย่างน้อยเมื่อกำหนดค่าโครงการของคุณเหมือนในบทช่วยสอน
CorayThan

3
@Roj ฉันยังคงเห็นสิ่งนี้ในรุ่น 6 แต่จะทำงานเมื่อใช้การอ้างอิงถึง browser.d.ts
inki

3
ไชโย! rc1 เข้าร่วมสิ่งนี้
RoninCoder

105

มีการแก้ไขปัญหาที่กล่าวถึงในการเปลี่ยนแปลงสำหรับ2.0.0-beta.6 (2016-02-11) (แสดงรายการภายใต้การเปลี่ยนแปลงที่ไม่หยุดหย่อน ):

หากคุณใช้ --target = es5 คุณจะต้องเพิ่มบรรทัดในแอปพลิเคชันของคุณ (ตัวอย่างเช่นที่ด้านบนของไฟล์. ts ที่คุณเรียกใช้ bootstrap):

///<reference path="node_modules/angular2/typings/browser.d.ts"/>

(โปรดทราบว่าหากไฟล์ของคุณไม่อยู่ในไดเรกทอรีเดียวกับ node_modules คุณจะต้องเพิ่มอย่างน้อยหนึ่ง .. / ลงในจุดเริ่มต้นของเส้นทางนั้น)

ตรวจสอบให้แน่ใจว่าคุณมีเส้นทางอ้างอิงที่ถูกต้องฉันต้องเพิ่ม.. /เพื่อเริ่มการทำงานนี้


3
สิ่งนี้แก้ไขข้อผิดพลาดมากมายสำหรับฉัน แต่ฉันยังคงได้รับข้อผิดพลาดเช่นTS2304: Cannot find name 'module'และTS2339: Property 'find' does not exist on type 'MyThing[]'.... ความคิดใด ๆ
mwijnands

1
จะเป็นอย่างไรถ้าคุณใช้มุมในแพ็คเกจที่นำมาใช้ซ้ำ แอปพลิเคชันใด ๆ ที่ฉันพยายามใช้แพคเกจที่มีไฟล์ที่มีการอ้างอิงนี้บ่นเมื่อเวลาสร้าง tsc ซึ่งไม่สามารถหาการอ้างอิงนี้ได้
ฮันส์

5
มีโซลูชั่นสำหรับโครงสร้างแพคเกจใหม่ในมุมที่ผมไม่สามารถหา browser.d.ts ในโครงสร้าง @angular ใหม่ / ....
I.devries

2
@ I.devries ถูกต้องพวกเขาได้ลบ browser.d.ts ตอนนี้ไฟล์เป็น index.d.ts และคุณจำเป็นต้องมีหนึ่งไฟล์สำหรับแต่ละองค์ประกอบเชิงมุมเนื่องจากแต่ละไฟล์ถูกติดตั้งแยกต่างหากใน rc.0 และใหม่กว่า คุณต้องติดตั้ง "typings" - ดูคำตอบของ Khaled Al-Ansari และ theUtherSide ด้านบน
Vern Jensen

1
ฉันแก้ไขได้โดยการเพิ่ม: /// <Reference path = "../ typings / index.d.ts" />
Sako73

80

คุณสมบัติของ ES6 เช่นสัญญาไม่ได้ถูกกำหนดไว้เมื่อกำหนดเป้าหมาย ES5 มีไลบรารีอื่น ๆ แต่ core-js เป็นไลบรารี javascript ที่ทีมงาน Angular ใช้ มันมี polyfills สำหรับ ES6

Angular 2 มีการเปลี่ยนแปลงมากมายตั้งแต่คำถามนี้ถูกถาม ประกาศประเภทมีมากง่ายต่อการใช้ใน typescript 2.0

npm install -g typescript

สำหรับคุณสมบัติ ES6 ใน Angular 2 คุณไม่จำเป็นต้องใช้ Typings เพียงใช้ typescript 2.0 หรือสูงกว่าและติดตั้ง @ types / core-js ด้วย npm:

npm install --save-dev @types/core-js

จากนั้นเพิ่มแอ็ตทริบิวต์TypeRootsและTypesเข้ากับ tsconfig.json ของคุณ:

{
  "compilerOptions": {
    "target": "es5",
    "module": "es6",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "typeRoots": [
      "../node_modules/@types"
    ],
    "types" : [
      "core-js"
    ]
  },
  "exclude": [
    "node_modules"
  ]
}

สิ่งนี้ง่ายกว่าการใช้ Typings ดังที่อธิบายไว้ในคำตอบอื่น ๆ ดูโพสต์บล็อกของ Microsoft สำหรับข้อมูลเพิ่มเติม: Typescript: The Future of Declaration Files


1
ฉันคิดว่า "ประเภท" อาเรย์ยังเป็นของ "compilerOptions" วัตถุ แต่นอกเหนือจากนั้นขอบคุณมากฉันดิ้นรนกับ fot นี้ทั้งวัน
plexus

@plexus ขอบคุณ! คุณถูกต้องเกี่ยวกับ compilerOptions ฉันแก้ไขคำตอบ
David Rinck

ขอบคุณสำหรับการโพสต์ที่ยอดเยี่ยม แต่ตาม URL ที่คุณให้ไว้มันไม่จำเป็นแม้แต่ที่จะเพิ่ม tsconfig.json มันใช้งานได้จริง ๆ :) อย่างน้อยก็ทำเพื่อฉัน ดังนั้นสิ่งเดียวที่คุณต้องทำคือติดตั้งแพ็คเกจที่ต้องการ
Ilya Chernomordik

คุณยังสามารถลบถ้าเพียงรายการเดียวที่คุณมีคือtypeRoots node_modules/@types
Morgan Touverey Quilling

เหมือนมีเสน่ห์ ตามที่ @ ilya-chernomordik ได้กล่าวถึงสิ่งนี้ก็ใช้ได้กับฉันโดยไม่ต้องเพิ่มTypeRootsและTypesเพื่อ tsconfig.json ในกรณีของฉันฉันยังต้องอัปเดตปลั๊กอิน Gulp gulp-typescript 2.x ซึ่งใช้ transpiling และรุ่นที่ฝังตัวของ TypeScript 1 แต่เมื่อฉันอัปเดตดังนั้นฉันจึงใช้ TypeScript 2 และเพิ่ม @ types / core-js polyfill ฉันเป็น ชุด ขอบคุณมาก.
rscarter

49

สำหรับผู้ที่ติดตาม Angular2 แบบฝึกหัดangular.ioเพื่อให้ชัดเจนนี่คือการขยายตัวของคำตอบของ mvdluit ตรงที่จะใส่รหัส:

คุณmain.tsควรมีลักษณะเช่นนี้:

/// <reference path="../node_modules/angular2/typings/browser.d.ts" />

import {bootstrap} from 'angular2/platform/browser'
import {AppComponent} from './app.component'
// Add all operators to Observable
import 'rxjs/Rx'

bootstrap(AppComponent);

โปรดทราบว่าคุณปล่อยไว้///ข้างหน้าเครื่องหมายทับอย่าลบออก

อ้างอิง: https://github.com/ericmdantas/angular2-typescript-todo/blob/master/index.ts#L1


ฉันใช้ VS2015 MVC6 และ Angular2 beta.14 หากคุณวางสายอ้างอิงไว้_references.jsมันจะไม่ทำงาน จะต้องอยู่ในองค์ประกอบเช่นคำตอบนี้แสดงให้เห็น นอกจากนี้ให้ใช้../../แทน../เส้นทาง
RoninCoder

@Hani คุณหาทางรอบ ๆ มันยัง? ฉันจะลองอัปเกรดเป็น rc1 และลองใช้งาน
Rots

ดังนั้นงานพิมพ์จึงหมดไป ฉันคิดว่าคุณจะต้องติดตั้งแยกต่างหากและเมื่อฉันทำฉันได้รับแพคเกจไร้ประโยชน์มากมายเช่นกัน อย่างไรก็ตามแม้หลังจากทำทั้งหมดแล้วไม่มีอะไรbrowser.d.tsอยู่ภายใต้โฟลเดอร์การพิมพ์ เพียงแค่ไฟล์ภายใต้.js distมีไฟล์ชื่อtypings.d.tsดังนั้นฉันคิดว่ามันเป็นไฟล์ใหม่ แต่มันไม่ได้แก้ปัญหา การสร้างผลงาน 'es6' แต่ IE ก็บ่น ดังนั้นติดอยู่กับการสร้าง 'es5' และไม่มีการพิมพ์! : /
RoninCoder

@Hani มีคำตอบใหม่ บางทีมันจะใช้งานได้? npm install -g typings typings install
Rots

ลดระดับเป็น beta.15 และใช้.d.tsแพคเกจการพิมพ์เดียวกัน นอกจากนี้เพื่อตอบสนองความต้องการ IE9 + ต้องสร้างสำหรับ es3
RoninCoder

48

ฉันสามารถแก้ไขได้ด้วยคำสั่งต่อไปนี้

typings install es6-promise es6-collections --ambient

โปรดทราบว่าคุณต้องtypingsทำให้คำสั่งด้านบนใช้งานได้หากคุณไม่ได้รันคำสั่งต่อไปนี้เพื่อติดตั้ง

npm install -g typings

UPDATE

การปรับปรุงการพิมพ์ไม่ได้อ่าน--ambientมันกลายเป็น--globalสำหรับบางคนที่คุณต้องติดตั้งคำจำกัดความของไลบรารีด้านบนเพียงใช้คำสั่งต่อไปนี้

typings install dt~es6-promise dt~es6-collections --global --save

ขอบคุณ@bgerth ที่ชี้เรื่องนี้ออกมา


9
สำหรับฉันมันเป็นtypings install dt~es6-promise dt~es6-collections --global --save
bgerth

1
@bgerth ฉันเดาว่ามันเปลี่ยนไปเนื่องจากการtypingsอัปเดตฉันจะเพิ่มคำตอบของคุณลงในคำตอบ
Khaled Al-Ansari

พิมพ์ติดตั้ง dt ~ es6- สัญญา dt ~ es6- คอลเลกชัน - โลก - บันทึกทำงานให้ฉัน ปัญหานี้เกิดขึ้นอีกและเป็นครั้งคราว ... ขอบคุณสำหรับการแก้ไขนี้ช่วยให้หวังว่ามันจะทำงานได้นานกว่าหนึ่งวัน
Sam

พิมพ์ติดตั้ง dt ~ es6- สัญญา dt ~ es6- คอลเลกชัน - โลก - บันทึกทำงานให้ฉันด้วย
Rikku121

33

เมื่อมี typescript> = 2 ตัวเลือก "lib" ใน tsconfig.json จะทำงาน ไม่จำเป็นต้องพิมพ์https://www.typescriptlang.org/docs/handbook/compiler-options.html

{
    "compilerOptions": {
        "target": "es5",
        "lib": ["es2016", "dom"] //or es6 instead of es2016(es7)
    }
}

ใช่ ... เพิ่ม "lib": ["es2016", "dom"] ไปยังไฟล์ tsconfig.json ของฉันแก้ไขมัน
Marvel Moe

สิ่งนี้ถูกต้อง เพียงใช้ความระมัดระวังเนื่องจากบางประเภทที่ประกาศในนั้นอาจไม่ปรากฏ
Aluan Haddad

@ Niels Steenbeek แก้ไขให้ถูกต้องแล้ว ฉันพบข้อผิดพลาดเดียวกันกับการทำแบบฝึกหัดสำหรับหลักสูตร Angular 2 & 4 อย่างไรก็ตามเนื้อหา lib ของฉันที่แตกต่างกันเล็กน้อย: "lib": ["es2015", "es2015.iterable", "dom"]
BoiseBaked

15

สำหรับAngular 2.0.0-rc.0การเพิ่มnode_modules/angular2/typings/browser.d.tsจะไม่ทำงาน ก่อนอื่นให้เพิ่มไฟล์ typings.jsonในโซลูชันของคุณด้วยเนื้อหานี้:

{
    "ambientDependencies": {
        "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#7de6c3dd94feaeb21f20054b9f30d5dabc5efabd"
    }
}

จากนั้นอัปเดตpackage.jsonไฟล์เพื่อรวมสิ่งนี้postinstall:

"scripts": {
    "postinstall": "typings install"
},

ตอนนี้ทำงาน npm install

นอกจากนี้คุณควรละเว้นtypingsโฟลเดอร์ในtsconfig.jsonไฟล์ของคุณด้วย:

 "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]

ปรับปรุง

ตอนนี้ AngularJS 2.0 ใช้แทนcore-js es6-shimติดตามไฟล์ typings.jsonเริ่มต้นอย่างรวดเร็วเพื่อดูข้อมูลเพิ่มเติม


มีปัญหากับข้อผิดพลาดนี้ในrc0 github.com/angular/angular/angular/issues/4902#issuecomment-216495769
ssuperczynski

15

คุณสามารถเพิ่มรหัสที่จุดเริ่มต้นของไฟล์. ts

/// <reference path="../typings/index.d.ts" />

สิ่งนี้ใช้ได้สำหรับฉัน ไม่จำเป็นต้องติดตั้งการพิมพ์ทั่วโลก พยายามในมุมที่มั่นคง 2
Gopinath พระอิศวร

ทำงานให้ฉันด้วยโดยใช้ Angular 2.0.0 (release)
JoshuaDavid

10

ฉันได้รับสิ่งนี้จาก Angular 2 rc1 เปลี่ยนชื่อบางส่วนด้วยการพิมพ์ v1 เทียบกับเก่า 0.x ไฟล์กลายเป็นbrowser.d.tsindex.d.ts

หลังจากเรียกใช้typings installค้นหาไฟล์เริ่มต้นของคุณ (ที่คุณ bootstrap) และเพิ่ม:

/// <reference path="../typings/index.d.ts" />(หรือไม่มี../หากไฟล์เริ่มต้นของคุณอยู่ในโฟลเดอร์เดียวกับโฟลเดอร์ typings)

การเพิ่มindex.d.tsลงในรายการไฟล์tsconfig.jsonไม่สามารถทำได้ด้วยเหตุผลบางประการ

นอกจากนี้es6-shimแพคเกจก็ไม่จำเป็นต้องใช้


7

ฉันสามารถแก้ไขได้โดยติดตั้งtypingsโมดูล

npm install -g typings
typings install

(การใช้ ng 2.0.0-rc.1)


1
"'typyings.json' หายไป - (ไม่มีการอ้างอิง)" มันกลับข้อผิดพลาดนี้เมื่อฉันเรียกใช้คำสั่งในโฟลเดอร์เดียวกันของไฟล์ app.ts ฉันควรจะหาไฟล์typings.jsonนี้จากที่ใดและเมื่อใดที่ฉันควรรันคำสั่ง
Ulysses Alves

7

ฉันมีปัญหาเดียวกันและฉันจะแก้ไขได้โดยใช้ตัวเลือกในlib tsconfig.jsonตามที่กล่าวโดยbasarat ในคำตอบของเขาเป็น.d.tsไฟล์รวมอยู่โดยปริยาย typescript ขึ้นอยู่กับการรวบรวมtargetตัวเลือก แต่พฤติกรรมนี้สามารถเปลี่ยนแปลงได้ด้วยlibตัวเลือก

คุณสามารถระบุไฟล์นิยามเพิ่มเติมที่จะรวมโดยไม่ต้องเปลี่ยนเวอร์ชัน JS เป้าหมาย สำหรับตัวอย่างนี้เป็นส่วนหนึ่งของฉันในปัจจุบันcompilerOptionsสำหรับ Typescript@2.1 และเพิ่มการรองรับes2015คุณสมบัติโดยไม่ต้องติดตั้งอะไรอีก:

"compilerOptions": {
    "experimentalDecorators": true,
    "lib": ["es5", "dom", "es6", "dom.iterable", "scripthost"],
    "module": "commonjs",
    "moduleResolution": "node",
    "noLib": false,
    "target": "es5",
    "types": ["node"]
}

สำหรับรายการที่สมบูรณ์ของตัวเลือกที่มีการตรวจสอบเอกสารที่เป็นทางการ

โปรดทราบว่าฉันเพิ่ม"types": ["node"]และติดตั้งnpm install @types/nodeเพื่อรองรับrequire('some-module')ในรหัสของฉัน


5
 typings install dt~es6-shim --save --global

และเพิ่มเส้นทางที่ถูกต้องไปที่ index.d.ts

///<reference path="../typings/index.d.ts"/>

พยายามที่ @ angular-2.0.0-rc3


โซลูชันนี้ทำงานได้อย่างสมบูรณ์แบบเมื่อเราต้องการไฟล์. dts ในโครงการห้องสมุด
Robin Ding

4

ถ้าnpm install -g typings typings installยังไม่ได้ช่วยลบnode_modulesและtypingsโฟลเดอร์ก่อนที่จะดำเนินการคำสั่งนี้


4

นี่คือสิ่งที่คิดว่าทุกคนพยายามทำสิ่งที่แตกต่าง ฉันเชื่อว่าระบบเหล่านี้ยังห่างไกลจากรุ่นสุดท้าย

ในกรณีของฉันฉันอัปเดตจาก rc.0 เป็น rc.5 ข้อผิดพลาดนี้ปรากฏขึ้น

คงที่ของฉันคือการเปลี่ยน tsconfig.json

{
    "compilerOptions": {
        "target": "es6", <-- It was es5
        "module": "system",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": false,
        "outDir": "../wwwroot/app"
    },
    "compileOnSave": true,
    "exclude": [
        "../node_modules",
        "../typings/main"
    ]
}

1
นี่เป็นการแก้ไขปัญหาของฉันเช่นกัน เวอร์ชั่น RC กำลังตั้งเป้าไปที่ es6
Inari

ตอนนี้คุณไม่ได้ตั้งเป้าหมาย ES5 อีกต่อไป ถ้ามีอะไรที่เปลี่ยนแปลงไม่ได้"lib" "target"
Aluan Haddad

4

เพิ่ม typ.d.ts ในโฟลเดอร์หลักของแอปพลิเคชันและจากนั้นประกาศ varible ที่คุณต้องการใช้ทุกครั้ง

declare var System: any;
declare var require: any;

หลังจากประกาศสิ่งนี้ใน typ.d.ts ข้อผิดพลาดที่ต้องมีจะไม่มาในแอปพลิเคชัน ..


4

ฉันใหม่กับ Angular แต่สำหรับฉันแล้ววิธีแก้ปัญหานั้นก็เพียงแค่การนำเข้าอินพุต ไม่สามารถเครดิตสำหรับสิ่งนี้พบบนกระดานอื่น นี่เป็นการแก้ไขที่ง่ายถ้าคุณมีปัญหาเดียวกัน แต่ถ้าปัญหาของคุณซับซ้อนกว่านี้ฉันจะอ่านสิ่งข้างต้น

เมเคช :

คุณต้องนำเข้าข้อมูลเช่นนี้ที่ด้านบนขององค์ประกอบลูก

import { Directive, Component, OnInit, Input } from '@angular/core';

3

ฉันพบเอกสารนี้มีประโยชน์มากที่เว็บไซต์ของ Angular 2 ในที่สุดก็ให้ฉันทำงานได้อย่างถูกต้องในขณะที่คำตอบอื่น ๆ ที่นี่เพื่อติดตั้งการพิมพ์ล้มเหลวฉันมีข้อผิดพลาดต่าง ๆ (แต่ช่วยพาฉันไปในทิศทางที่ถูกต้อง)

แทนที่จะรวมถึงสัญญา es6 และคอลเลกชัน es6 มันรวมถึง core-js ซึ่งทำเคล็ดลับสำหรับฉัน ... ไม่มีความขัดแย้งกับคำจำกัดความแกนหลักของ Angular2 นอกจากนี้เอกสารอธิบายวิธีตั้งค่าทั้งหมดนี้ให้เกิดขึ้นโดยอัตโนมัติเมื่อติดตั้ง NPM และวิธีแก้ไขไฟล์ typings.json ของคุณ


2

Angular 2 RC1 เปลี่ยนชื่อnode_modules/angular2ไดเรกทอรีเป็นnode_modules/angularไดเรกทอรี

หากคุณใช้ gulpfile เพื่อคัดลอกไฟล์ไปยังไดเรกทอรีออกคุณอาจยังคงมี node_modules/angularอยู่ที่นั่นซึ่งคอมไพเลอร์อาจถูกหยิบขึ้นมาและสร้างความสับสนให้กับตัวเอง

ดังนั้น (อย่างระมัดระวัง) ล้างสิ่งที่คุณมีในnode_modulesรุ่นเบต้าและลบการพิมพ์เก่าและเรียกใช้typings installซ้ำ


หรืออีกวิธีหนึ่ง ... ทำงานกับสิ่งอื่น ๆ เป็นเวลา 4 เดือนและรอรุ่นสุดท้ายเพื่อเริ่มต้นใหม่ตั้งแต่ต้น (ซึ่งเป็นสิ่งที่ฉันทำ)
Simon_Weaver


2

อย่านำเข้าคำสั่งด้านล่างในไฟล์ JS ของคุณ

import 'rxjs/add/operator/map';

ฉันเลื่อนการอัปเกรดโปรเจ็กต์เป็นเวอร์ชันล่าสุดดังนั้นเพิ่มไฟล์ rxjs-extensions import './rxjs-extensions';ของฉันapp.component.tsจากบทช่วยสอน angular2 (รวมถึงบรรทัดที่คุณแนะนำ) และดูเหมือนว่าจะลบข้อผิดพลาดเหล่านั้นออกไป
James

คุณช่วยอธิบายให้ชัดเจนมากขึ้นได้ไหม ไฟล์ JS อะไร รวบรวมโดย typescript หรือไม่ หลัก?
mm_

2

คำตอบที่ได้รับการยอมรับไม่ได้ให้การแก้ไขที่มีศักยภาพและคำตอบอื่น ๆ ส่วนใหญ่แนะนำให้ใช้วิธีแก้ปัญหา "สามสแลช" ซึ่งไม่สามารถใช้งานได้อีกต่อไปเนื่องจากbrowser.d.tsAngular2 RC รุ่นล่าสุดถูกลบออกไปแล้ว

ฉันขอแนะนำอย่างยิ่งให้ติดตั้งtypingsโมดูลตามที่แนะนำโดยคู่โซลูชั่นที่นี่ แต่ไม่จำเป็นต้องทำด้วยตนเองหรือทั่วโลก - มีวิธีที่มีประสิทธิภาพในการทำเช่นนั้นสำหรับโครงการของคุณเท่านั้นและภายใน VS2015 ส่วนติดต่อ นี่คือสิ่งที่คุณต้องทำ:

  • เพิ่ม typingsในไฟล์ package.json ของโครงการ
  • เพิ่มscriptบล็อกในpackage.jsonไฟล์เพื่อดำเนินการ / อัปเดตtypingsหลังจากแต่ละการกระทำ NPM
  • เพิ่มtypings.jsonไฟล์ในโฟลเดอร์รูทของโครงการที่มีการอ้างอิงถึงcore-js(โดยรวมดีกว่าes6-shimatm)

แค่นั้นแหละ.

นอกจากนี้คุณยังสามารถดูที่หัวข้อ SO อื่น ๆและ / หรืออ่านโพสต์นี้บนบล็อกของฉันสำหรับรายละเอียดเพิ่มเติม


2

ฉันได้รับข้อผิดพลาดนี้หลังจากรวมสาขา dev ของฉันกับสาขาปัจจุบันของฉัน ฉันใช้เวลาบางครั้งเพื่อแก้ไขปัญหา อย่างที่คุณเห็นในภาพด้านล่างไม่มีปัญหาในรหัสเลย

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นการแก้ไขเดียวที่ใช้ได้ผลกับฉันก็คือการรีสตาร์ท VSCode


0

ตอนนี้คุณต้องนำเข้าด้วยตนเอง

import 'rxjs/add/operator/retry';
import 'rxjs/add/operator/timeout';
import 'rxjs/add/operator/delay';
import 'rxjs/add/operator/map';




this.http.post(url, JSON.stringify(json), {headers: headers, timeout: 1000})

         .retry(2)

         .timeout(10000, new Error('Time out.'))

         .delay(10)

         .map((res) => res.json())
        .subscribe(
          (data) => resolve(data.json()),
          (err) => reject(err)
        );

-3

อัพเดทtsconfig.jsonเปลี่ยนแปลง

"target": "es5"

ถึง

"target": "es6"

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