Definitelytyped: @types/core-js unterbricht Build in Version 0.9.37

Erstellt am 13. MĂ€rz 2017  Â·  47Kommentare  Â·  Quelle: DefinitelyTyped/DefinitelyTyped

  • [X] Ich habe versucht, das Paket @types/xxxx und hatte Probleme.
  • [X] Ich habe versucht, die neueste stabile Version von tsc zu verwenden. https://www.npmjs.com/package/typescript
  • [X] Ich habe eine Frage, die fĂŒr StackOverflow unangemessen ist. (Bitte stellen Sie dort entsprechende Fragen).
  • [X] [ErwĂ€hnen](https://github.com/blog/821-mention-somebody-they-re-notified) die Autoren (siehe Definitions by: in index.d.ts ), damit sie es können Antworten.

    • Autoren: @rbuckton

Es scheint, dass es einige Probleme mit dem Paket 0.9.37 core-js und tsc 2.2.1 . gibt

Ich bekomme viele Compilerfehler: (nur ein Ausschnitt davon)
node_modules/@angular/core/src/facade/lang.d.ts(12,17): error TS2693: 'Map' bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet.
node_modules/@angular/core/src/facade/lang.d.ts(13,17): error TS2693: 'Set' bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet.
node_modules/@types/core-js/index.d.ts(47,36): Fehler TS2304: Name 'Iterable' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(350,48): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(351,52): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(352,34): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(353,34): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(354,34): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
node_modules/@types/core-js/index.d.ts(355,61): Fehler TS2304: Name 'PropertyKey' kann nicht gefunden werden.
.....
node_modules/@types/core-js/index.d.ts(2103,41): error TS2339: Eigenschaft 'toStringTag' existiert nicht auf Typ 'SymbolConstructor'.
node_modules/@types/core-js/index.d.ts(2107,41): error TS2339: Eigenschaft 'unscopables' existiert nicht auf Typ 'SymbolConstructor'.
node_modules/rxjs/Observable.d.ts(69,60): error TS2693: 'Promise' bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet.
node_modules/rxjs/operator/toPromise.d.ts(3,79): error TS2693: 'Promise' bezieht sich nur auf einen Typ, wird hier aber als Wert verwendet.
typescript\shared\login.component.ts(81,62): Fehler TS2339: Eigenschaft 'find' existiert nicht auf Typ 'Unit[]'.
typescript\shared\login.component.ts(81,62): Fehler TS2339: Eigenschaft 'find' existiert nicht auf Typ 'Unit[]'.

Mit der 0.9.35 funktioniert alles wie erwartet.

Ich frage mich, ob es die Änderung in ts.config von es5 zu ef2017 ist, die dies verursacht? Kannst du nicht wirklich sehen, dass eine der anderen Änderungen dies bewirkt haben könnte?

Hilfreichster Kommentar

Beim HinzufĂŒgen

"lib": ["es2017", "dom"]

zu meinem compilerOptions in tsconfig.json dieses Problem fĂŒr mich gelöst.

danke @andy-ms

Alle 47 Kommentare

Auch hier bekommen wir viele Fehler. (Name "Promise" kann nicht gefunden werden, Name "Set" kann nicht gefunden werden, ...)
Die RĂŒckkehr zu 0.9.36 behebt das Problem derzeit fĂŒr uns.

@andy-ms / @mhegazy

"Definitionen nach" sagt @rbuckton , aber es gibt keine Antwort. Ich sehe, dass der letzte Commit von Ihnen durchgefĂŒhrt wird. Irgendwelche Kommentare?

Wenn nicht @rbuckton verantwortlich ist, aktualisieren Sie vielleicht index.d.ts mit dem richtigen Verantwortlichen ?

Versuchen Sie, --lib in Ihrer tsconfig einzustellen, um die benötigten Definitionen zu erhalten.

@andy-ms Ich bin mit dem Typoskript-Compiler, seinen Interna und der Verwendung der Typenbibliothek nicht so vertraut, also bin ich mir nicht ganz sicher, was ich hier im lib-Abschnitt einstellen soll? Und warum? Bitte beraten.

@dozer75 schau dir diesen Link an: [Typescript Compiler Options].(https://www.typescriptlang.org/docs/handbook/compiler-options.html)

Wenn Sie Ihre Datei tsconfig.json Ă€ndern, fĂŒgen Sie eine Eigenschaft von lib mit einem Array von Zeichenfolgen hinzu, die angeben, welche Bibliotheken eingeschlossen werden sollen. FĂŒr mich habe ich @types/core-js in einer Node-Server-Umgebung verwendet (mit dem Ziel es5, dh mein Typskript wurde fĂŒr die Produktion in es5 kompiliert), also fĂŒgte ich einfach "es2015" und alles funktionierte gut. Es sieht so aus, als ob Sie sich in einer Browserumgebung befinden, indem Sie "dom" hinzufĂŒgen, um Standard-Javascript window und Ă€hnliches zu erhalten.

Beim HinzufĂŒgen

"lib": ["es2017", "dom"]

zu meinem compilerOptions in tsconfig.json dieses Problem fĂŒr mich gelöst.

danke @andy-ms

Die @DrDanRyan-Typescript- Dokumentation besagt, dass die Verwendung von es5 als Ziel DOM,ES5,ScriptHost zu libs hinzufĂŒgt. Dies sollte also nicht benötigt werden.
@Narven Wenn Sie es2017 zu Ihrer

Ich bin etwas verwirrt, warum Core-js-Typisierungen plötzlich von anderen Bibliotheken abhĂ€ngen. Das sieht fĂŒr mich nicht nach der richtigen Lösung aus.

@DaSchTour Ich denke, dass lib: ["dom", "es5", "scriptHost"] die Standardeinstellung fĂŒr das Ziel es5 ist, wenn Sie selbst keine lib-Eigenschaft angeben . Das ist zumindest mein VerstĂ€ndnis, und das wĂ€re der Grund, warum Sie keine doppelten Bezeichner erhalten, wenn Sie lib: ["es2015", "dom"] selbst angeben.

Außerdem ist die Option lib ein Ersatz fĂŒr die Verwendung von @types/core-js im Gegensatz zu einer AbhĂ€ngigkeit.

@DrDanRyan ist definitiv kein Ersatz! lib fĂŒr ES2017 wird weit mehr als @types/core-js wodurch Kompilierungsfehler ausgeblendet werden, wenn Features verwendet werden, die nicht von core-js polyfilled sind

Deshalb verwende ich "es2015" was fĂŒr einen Node-Server funktioniert ...

Das Problem besteht weiterhin. lib enthĂ€lt mehr als core-js daher denke ich nicht, dass Eingaben fĂŒr core.js lib "erweitern" sollten.

Ich glaube wir reden hier aneinander vorbei. Ich sage nur, dass ich nach dem EinfĂŒgen von lib: ["es2015"] in mein tsconfig.json @types/core-js nicht mehr verwenden muss, also habe ich es deinstalliert und verwende jetzt nur das Compiler-Flag.

Vernetzung mit PR, die das verursacht hat: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/15108

Das Setzen von lib: ["es2015"] hat das Problem fĂŒr mich nicht gelöst.

ich bekomme immer noch

error TS2693: 'Promise' only refers to a type, but is being used as a value here.

Ich habe versucht, alles hinzuzufĂŒgen:

  "lib": [
    "es5",
    "es2015",
    "es2017",
    "dom",
    "scripthost"
  ],

und bekomme immer noch den Fehler

Können Sie den fehlerhaften Code bereitstellen?

Am Ende habe ich es so gelöst:

{
  "compilerOptions": {
    "target": "es6",
    "module": "es6",
    ...
  },
  "lib": [
    "ES5",
    "ES2015",
    "DOM",
    "ScriptHost"
  ]

und Entfernen von @types/core-js

@dmitriid weiß nicht warum, aber der gleiche lib-Wert hat bei mir funktioniert.

Hier ist meine gesamte tsconfig.

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "es5",
      "es2015",
      "es2017",
      "dom",
      "scripthost"
    ],
    "module": "commonjs",
    "experimentalDecorators": true,
    "sourceMap": true
  }
}

Wahrscheinlich habe ich mein Problem gelöst und mein Upvote vom ursprĂŒnglichen Beitrag zurĂŒckgenommen.

Ist die Verwendung der "lib" -Konfiguration die richtige langfristige Lösung oder wird @types/cores-js repariert, damit es wie zuvor verwendet werden kann?

@PrimalZed Ich glaube nicht, dass die Verwendung von lib ĂŒberhaupt eine richtige Lösung ist, da sie Funktionen einfĂŒhrt, die ĂŒber core-js möglicherweise nicht verfĂŒgbar sind. lib und @types/core-js enthalten also nie denselben Methodensatz und core-js enthĂ€lt immer weniger als lib.

@DaSchTour schauen wir uns das Beispiel an:

  • Es gibt eine Bibliothek X , die ES6 Map verwendet und mit es6 lib-Definitionen eingegeben wird
  • Um alte Browser zu unterstĂŒtzen, haben Sie core-js polyfill in Ihren Code importiert, bevor Sie X importiert haben.

Bibliotheken von Drittanbietern wissen nichts ĂŒber die tatsĂ€chliche Polyfill-Implementierung, daher sollte Polyfill identische Definitionen bereitstellen, um Fehler wie diese zu vermeiden https://github.com/DefinitelyTyped/DefinitelyTyped/issues/15104

@just-boris und dann gibt es Projekt Y und wĂ€hrend der Verwendung von core-js und der Kompilierung zu es5 mit es6 lib sieht ein Entwickler, dass Strings eine Funktion namens normalize haben. Super 🎉 verwenden wir es, es ist genau das, was ich gesucht habe. Und einige Wochen spĂ€ter beim Testen von IE11 und Safari 9 sehen wir seltsame Fehler, die wir mit TypeScript vermeiden wollten đŸ€”
Oh und plötzlich können wir Proxy mit ES5 auf IE11 verwenden. Schön!
Daher muss polyfill volle, 100%ige UnterstĂŒtzung fĂŒr ES6 implementieren, um Fehler zu vermeiden und eine sichere Verwendung zu ermöglichen. 100%, 99,999% sind zu wenig, da lib Features aufdeckt, die nicht mehrfach gefĂŒllt sind. Also sagen wir tschĂŒss Core-js 😱

Meinerseits habe ich ein Upgrade auf @types/ core- js@

"lib": [
      "dom",
      "dom.iterable",
      "es2015",
      "scripthost"
    ],

Beim HinzufĂŒgen

"lib": ["es2017", "dom"]

zu meinen CompilerOptions in tsconfig.json hat dieses Problem fĂŒr mich gelöst.

danke @Narven

@just-boris dein Kommentar hat bei mir funktioniert, ty!

Ich brauche dies, um fĂŒr "target es5" zu funktionieren, die Verwendung von lib ist ein Hack und hat insgesamt nur einen schlechten Geruch.

Der empfohlene Weg ist die Verwendung von @types/core-js, was fĂŒr einfachen Code wie . leider nicht funktioniert

let p = Promise.resolve( [ 1, 2, 3 ] );
p.then( function( v ) {
  console.log( v[ 2 ] ); // 1
} );

@andy-ms / @mhegazy
Wenn ich darf, wĂŒrde ich gerne wieder auftauchen, schrieb auf #15108:

Ist es nicht der Sinn der Typescript-Definitionsdateien zu beschreiben, was Pakete bereitstellen? Ich glaube, die Definition sollte auf das Paket genau sein, nicht auf die Umgebung. Insbesondere bei core-js, wenn jemand es verwendet, zB 'core-js' importiert, tun sie dies möglicherweise, weil sie ihre Umgebung shimmen, nicht wahr?

Ein wichtiger Grund fĂŒr die Verwendung von Typdefinitionen besteht darin, dass Probleme zur Kompilierzeit und nicht zur Laufzeit aufgedeckt werden. Es ist tatsĂ€chlich sehr wichtig, dass core-js Definitionen darstellen, was core-js speziell tut, da sie keine perfekte Polyfill fĂŒr es2015/es2016/es2017 bieten. Aus diesem Grund mĂŒssen die Umgebungsbibliotheken – insbesondere fĂŒr Bibliotheken wie core-js – eine separate Angelegenheit sein, dh die PolyfĂŒllung entspricht möglicherweise nicht dem Standard.

Das Generieren von Breaking Changes projektĂŒbergreifend aufgrund von Änderungen wie dieser kann nicht so auf die leichte Schulter genommen werden, wie es hier gezeigt wird. Zum einen ist es schwer genug, die Auswirkungen der Aktualisierung von @types- Paketen im

Ich konnte meinen Kompilierungsfehler beheben, indem ich Folgendes zu meinem tsconfig.json hinzufĂŒgte.

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

Das wirklich Dumme an dieser Lösung ist, dass TypeScript ohne "dom" einen Fehler ausgibt, wenn Promise verwendet wird.

Sie können diese Fehler auch erhalten, wenn Ihr Build nicht richtig eingerichtet ist.

Ich verwende gulp + gulp-typescript und habe den Typescript-Build-Prozess nicht so eingerichtet, dass tsconfig.json berĂŒcksichtigt wird.

Also versuche das:

gulp.task('typescript', function () {
  var tsProject = ts.createProject(`${sourceRoot}/tsconfig.json`);
  return gulp.src([`${sourceRoot}/**/*.ts`])
    .pipe(tsProject())
    .pipe(gulp.dest(`${destinationRoot}`));
});

Dies kann in Verbindung mit anderen Antworten von Leuten hilfreich sein :smile:

Beim HinzufĂŒgen

"lib": ["es2015", "dom"]
zu meinen CompilerOptions in tsconfig.json hat dieses Problem fĂŒr mich gelöst.

Wenn @elusive die Eigenschaft "lib" zu meinem tsconfig.json mit den angegebenen Werten hinzufĂŒgte, wurde das Kompilierungsproblem behoben.

Es sieht jedoch nach einem Hack aus.

Irgendeine sauberere Lösung auf dem Weg?

Ich habe den Eindruck, dass die Änderungen, die zu diesem Problem fĂŒhrten, die Entwickler-Community ĂŒberschwemmt haben. Ein Teil hat seine tsconfig.json geĂ€ndert, der andere Teil hat die Typisierungsversion auf eine Ă€ltere Version gesetzt.

@DaSchTour : In meinem Fall habe ich den Trick fĂŒr die tsconfig.json verwendet, weil es nur fĂŒr ein Beispiel fĂŒr Frint ist

Aber fĂŒr ein echtes Projekt sollte eine echte Lösung gefunden werden. Könnten wir core-js nicht aktualisieren und reparieren?

Ich verwende das neueste alles und keines der lib Beispiele hat fĂŒr mich funktioniert :(

Ich sehe diesen Fehler auch. Es macht nicht alles kaputt, aber es nervt mich, diese kleinen roten Linien auf der Zusammenstellung zu sehen.

Sie gehen weg mit:

"target": "es5"
...
"lib": ["es5","dom","scripthost","es2015"]

Technisch gesehen ging der Fehler mit nur "lib": ["es2015","dom"] weg, aber wenn Sie sich die TS-Compiler-Optionen ansehen, sind die Standard-Lib-Injektionen fĂŒr ein Ziel von es5 "es5", "dom","scripthost" , und ich habe Ich möchte die Standardeinstellungen nicht verlieren.

Mit dieser Änderung habe ich jedoch erhebliche Verzögerungen/Fehler in den Antworten meines Programms im Vergleich zu vor dem HinzufĂŒgen der Option lib festgestellt, also habe ich sie entfernt. Eine echte Lösung wĂ€re super!

Nur zu Ihrer Information, wenn Sie diese Probleme beim Versuch sehen, NG2 zum Laufen zu bringen, verschwinden alle diese Probleme, wenn Sie Angular CLI verwenden.

Dies ist die tsconfig, die Angular CLI erstellt:

"compileOnSave": false,
  "compilerOptions": {
    "outDir": "wwwroot/js/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  }

Das lasse ich jetzt schon lange offen, denn alles was hier geschrieben wird sind meiner Meinung nach Workarounds, keine Lösungen.

Ist das nicht alles, was im Definitionspaket selbst gelöst wird?

Wie andere sagen, funktioniert es durch das HinzufĂŒgen eines lib-Eintrags in tsconfig, aber es macht dieses Paket auch ĂŒberflĂŒssig. Warum brauchen wir dieses Paket ĂŒberhaupt, wenn es nur durch das Setzen von lib behandelt werden kann (was wir sowieso tun mĂŒssen)?

Meine Lösung bestand darin, lib hinzuzufĂŒgen: [ "es2015", "dom" ] in meiner ts.config und ich habe auch diese Bibliothek entfernt, da sie beim HinzufĂŒgen der lib-EintrĂ€ge nicht benötigt wurde.

Wenn die Besitzer dieses Pakets damit nichts anfangen wollen. Ich schlage Ihnen vor, dieses Problem mit einem Kommentar zu schließen, warum und wie es richtig gemacht wird, damit jeder weiß, was zu tun ist.

Diese Lösung hatte fĂŒr mich auf einem Windows-Rechner funktioniert.

"lib": ["es2017", "dom"]
zu meinen CompilerOptions in tsconfig.json hat dieses Problem fĂŒr mich gelöst.

danke @andy-ms

@Jtreu Vielen Dank fĂŒr Ihre Antwort zu diesem Thema.

Das war gleich zu Beginn dieses Projekts das Thema

https://github.com/toni-rmc/laravel-angular-integration

und Ihre Antwort hilft, es zu lösen.

Ich habe eine PR eingereicht, um dies in die richtige Form zurĂŒckzusetzen: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/19531

@dozer75 @ctlong @DaSchTour @rajinder-yadav @jackTheRipper

Wenn ich zum Beispiel nur ES6-Symbole mit core-js shimme, sollten die enthaltenen Bibliotheken (mindestens): es5 , dom , es2015.symbol

Kann mir jemand bestÀtigen, ob meine Interpretation richtig ist? Danke!
/cc @andy-ms

@cvsguimaraes Das sollte richtig sein.

Ist das noch kaputt? Ich bekomme error TS2304: Cannot find name 'PropertyKey'. und mehr am 0.9.43

UPDATE: Egal, ich wusste nicht, dass die Bereitstellung einer Quelldatei zum Kompilieren auf der Befehlszeile wie tsc priotractor.ts verhindern wĂŒrde, dass die Datei `tsconfig. Ich habe nur fĂŒr meinen Winkelmessertest eine neue tsconfig-Datei erstellt, die nur die eine Datei enthĂ€lt, die ich kompilieren möchte, und sie funktioniert jetzt einwandfrei.

Hier ist meine Konfiguration, falls es jemandem hilft

{
   "compileOnSave": false,
   "compilerOptions": {
      "baseUrl": ".",
      "moduleResolution": "node",
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "target": "es5",
      "typeRoots": [
         "node_modules/@types"
      ],
      "lib": [
         "es2016",
         "dom"
      ]
   },
   "files": [
      "./config/protractor.config.ts"
   ]
}

Falls jemand anderes aus meinem Fehler lernen kann. Stellen Sie sicher, dass Sie eine tsconfig.json im richtigen Verzeichnis bearbeiten!

Nach langem Headbangen bemerkte ich, dass ich die Konfiguration in meinem Projekt-Root bearbeite und nicht die Konfiguration in root/src, die ich in VSCode geöffnet hatte. Nachdem dort die empfohlenen Änderungen vorgenommen wurden, funktioniert es.

Das Aktualisieren von TypeScript auf v2.6.1 und das Festlegen als Version fĂŒr VS Code hat das Problem fĂŒr mich gelöst.

@IAMtheIAM hat es fĂŒr mich behoben, danke

Ich habe die meisten der hier aufgelisteten compilerOptions Einstellungen ausprobiert, mit wenig bis keinem Erfolg ĂŒber ein paar Tage hinweg. Verdammt, ich habe sogar das Typescript-Paket auf meinem Betriebssystem aktualisiert!

Die Lösung war zu einfach zu erkennen: Übergeben Sie TS-Dateien nicht direkt an tsc , sondern geben Sie sie in tsconfig.json und rufen Sie einfach tsc .

@shybovycha Soweit das Problem

    "@types/core-js": "2.5.0"
    "core-js": "2.5.7"
    "typescript": "3.1.6"
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen