2016-07-28 6 views
1

Derzeit aktualisiere ich mein Projekt von angular2 beta15 zu rc4. Wenn ich kompilieren, erhalte ich eine Fehlermeldung:Angular 2 kann den Dateinamen 'Set' nicht finden

path/node_modules/@angular/common/src/directives/ng_class.d.ts(81,35): error TS2304: Cannot find name 'Set'.

Mein tsconfig.json sieht wie folgt:

{ 
    "compilerOptions": { 
    "target": "ES5", 
    "module": "commonjs", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "moduleResolution": "node", 
    "removeComments": false, 
    "noImplicitAny": true, 
    "suppressImplicitAnyIndexErrors": false, 
    "declaration": true, 
    "outDir": "tmp/app" 
    }, 
    "exclude": [ 
    "node_modules", 
    "dist", 
    "tmp" 
    ] 
} 

in main.ts Ich habe auch enthalten:

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

und typings.json:

{ 
    "name": "my-project", 
    "dependencies": {}, 
    "globalDependencies": { 
    "core-js": "registry:dt/core-js#0.0.0+20160602141332", 
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", 
    "node": "registry:dt/node#6.0.0+20160621231320", 
    "moment": "registry:dt/moment#2.8.0+20160316155526", 
    "moment-node": "registry:dt/moment-node#2.11.1+20160329220348", 
    "es6-shim": "registry:dt/es6-shim#0.31.2+20160317120654" 
    } 
} 

Thi s Fehler ist weg, wenn ich "Ziel" ändern: "ES5" zu "ES6" in tsconfig.json, aber ich muss ES5 verwenden. Ich nehme an, dass das Problem auftaucht, wenn ich ///<reference path="../../node_modules/angular2/typings/browser.d.ts"/> nicht mit einschließe. Jedoch können wir gemäß https://github.com/typings/typings/issues/151 stattdessen typings/index.d.ts verwenden.

Könnten Sie bitte Ihre Meinung teilen, um dieses Problem zu lösen? Vielen Dank im Voraus.

Antwort

2

Ich denke, dass Set von der Polyfill für ES6 zur Verfügung gestellt wird. Angular2 empfiehlt die Verwendung von Kern-js für diesen (siehe https://angular.io/guide/quickstart):

We begin with core-js's ES2015/ES6 shim which monkey patches the global context (window) with essential features of ES2015 (ES6)

Sie es in Ihrer typings.json Datei angeben können, aber Sie müssen Typisierungen mit dem Befehl typings install installieren.

+0

Vielen Dank für Sie Thierry antworten. Ich habe typings.json aktualisiert, indem ich es6-shim entfernte und core-js verließ. Die did typings installieren. Das Script-Tag es6-shim wurde aus index.html entfernt. Allerdings bekomme ich immer noch den gleichen Fehler. – user3506588

+0

Gern geschehen! Können Sie es mit der Typoskript-Compiler-Konfiguration (Datei 'tsconfig.json') versuchen, die im Schnellstart-Dokument bereitgestellt wird? –

+0

Ihr Problem liegt vor der Ausführung der Anwendung in der Kompilierungsphase. Also ich denke, dass das Problem nicht in der 'index.html' Datei ist ... –

1

Ich habe diesen Fehler beim Ausführen einer Demo-Anwendung festgestellt. Wenn ich in meiner tsconfig.json das Ziel auf "es6" geändert habe, hatte ich keine Probleme. Nach dem Ausführen der Angular 2 Quick Start-Anwendung, die funktionierte, begann ich, die Unterschiede in meiner tsconfig.json-Datei zu vergleichen. Es kam zu einer Linie nach unten, dass ich in meiner tsconfig.json Datei fehlt:

"lib": ["es2015", "dom"] 

Nach fügte hinzu, dass eine Zeile meiner tsconfig.json Datei, es die Fehler behoben. Dies ist, was ich in der Winkel Typoskript Konfiguration Dokumentation über diese Linie gefunden:

lib.d.ts

TypeScript includes a special declaration file called lib.d.ts. This file contains the ambient declarations for various common JavaScript constructs present in JavaScript runtimes and the DOM.

Based on the --target, TypeScript adds additional ambient declarations like Promise if our target is es6.

Since the QuickStart is targeting es5, we can override the list of declaration files to be included:

"lib": ["es2015", "dom"]

Thanks to that, we have all the es6 typings even when targeting es5.

https://angular.io/docs/ts/latest/guide/typescript-configuration.html