Typescript: typeRoots findet keine benutzerdefinierte Deklarationsdatei

Erstellt am 28. Feb. 2018  ·  15Kommentare  ·  Quelle: microsoft/TypeScript



TypeScript-Version:
Version 2.6.2


Suchbegriffe:
Deklarationsdatei für die Funktion zum Exportieren von Modulen, externes Modul, npm-Paket, Modul eines Drittanbieters

Code
src/testFile.ts :

import getFieldList = require('graphql-list-fields');

src/@types/graphql-list-fields/index.d.ts :

// Doing just this below (as suggested by the Typescript Handbook does not work 
// and results in the tsc error under **Actual behavior** below
import { GraphQLResolveInfo } from 'graphql';
declare function getFieldList(info: GraphQLResolveInfo): string[];
export = getFieldList;

// The code below is what actually works instead of the above
/*
declare module 'graphql-list-fields' {
    import { GraphQLResolveInfo } from 'graphql';
    function getFieldList(info: GraphQLResolveInfo): string[];
    export = getFieldList;
}
*/

Erwartetes Verhalten:
Kompilieren ohne Fehler.

Tatsächliches Verhalten:
Fehler beim Ausführen von tsc :

src/testFile.ts(1,31): error TS7016: Could not find a declaration file for module 'graphql-list-fields'. '/node_modules/graphql-list-fields/index.js' implicitly has an 'any' type.
Try `npm install @types/graphql-list-fields` if it exists or add a new declaration (.d.ts) file containing `declare module 'graphql-list-fields';`

graphql-list-fields ist ein NPM-Paket, das ich verwenden möchte und das derzeit keine veröffentlichten Typdeklarationen enthält.

Nachdem ich den Abschnitt des Typoskript-Handbuchs zu Deklarationsdateien gelesen hatte, stellte ich fest, dass ich versuche, eine Deklarationsdatei für eine modulare Bibliothek zu schreiben, und die Deklarationsdateivorlage module-function.d.ts verwenden sollte. Auf diese Weise habe ich den Code in index.d.ts oben gefunden, aber der Compiler beschwert sich immer noch darüber, dass die Deklarationsdatei für das Modul 'graphql-list-fields' nicht vorhanden ist. Nach Versuch und Irrtum stellten wir fest, dass das Hinzufügen von declare module 'graphql-list-fields' um alles ohne Compilerfehler funktionierte.

Wir haben versucht, "typeRoots": ["./node_modules/@types", "./src/@types"] in tsconfig.json festzulegen , wie in den declare module 'graphql-list-fields' funktionierte das immer noch nicht. Dies scheint ein Problem zu sein, da tsc die Typdeklaration in den in typeRoots angegebenen Verzeichnissen nicht findet.

Verwandte Themen:
3019 , 8335

Question

Hilfreichster Kommentar

TypeRoots ist wirklich eine Unterstützung, die wir hinzugefügt haben, um die Kompatibilität mit Typisierungen zu Deshalb haben wir versucht, sie so weit wie möglich aus den Dokumenten herauszuhalten, um Verwirrung zu vermeiden.

@mhegazy Eine unterstützte Funktion mit wenig bis gar keiner Dokumentation liberal um. Zum Beispiel:

_ Hinweis: Diese Funktion dient der Abwärtskompatibilität mit Typisierungen zur Unterstützung der Migration. Weitere Informationen finden Sie in den Versionshinweisen [hier].

Dies wäre vorzuziehen, wenn GitHub-Probleme, StackExchange usw. nach Informationen durchsucht werden müssen.

Alle 15 Kommentare

"typeRoots" ist für globalen Code gedacht. dh etwas, das im globalen Namespace deklariert ist und das Sie einschließen möchten. Aus diesem Grund funktioniert Ihr declare module 'graphql-list-fields' {.. , da es nur ein Modul mit diesem Namen im globalen Namespace deklariert.

Für Module haben sie ihren eigenen Umfang. Sie benötigen lediglich eine Pfadzuordnung.

so etwas wie:

{
    "compilerOptions": {
        "target": "es5",
        "baseUrl": "./",
        "paths": {
            "*" : ["src/@t`ypes/*"]
        }
    }
}`

Danke, dass du das @mhegazy geklärt hast. Ich denke, es wäre hilfreich, wenn dies in den TypeScript-Dokumenten näher erläutert würde, möglicherweise im Abschnitt Deklarationsdateien .

TypeRoots ist wirklich eine Unterstützung, die wir hinzugefügt haben, um die Kompatibilität mit Typisierungen zu Deshalb haben wir versucht, sie so weit wie möglich aus den Dokumenten herauszuhalten, um Verwirrung zu vermeiden.

Ich bin mir nicht sicher, ob dies in den Abschnitt mit der Deklarationsdatei passt. Wir haben einen Hinweis dazu in https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

Ich kann im Abschnitt mit der Deklarationsdatei einen Hinweis zum Abschnitt über die Modulauflösung als Ganzes hinzufügen.

Lesen Sie diesen Abschnitt durch und lassen Sie uns wissen, ob darin noch Dokumente fehlen

Oh ich verstehe. Ja, das ist die Seite, mit der ich anfangen musste. Ich denke, es wäre schön, zumindest eine kurze Erwähnung der Pfadzuordnung und möglicherweise einen Link zu diesem Dokument irgendwo unter https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html zu haben.

Automatisches Schließen dieses Problems für Reinigungszwecke. Die Problemetiketten weisen darauf hin, dass es derzeit nicht aktiv ist oder bereits behoben wurde.

Ich denke immer noch, dass es hilfreich wäre, die Dokumente wie in meinem vorherigen Kommentar @ typescript-bot angegeben zu aktualisieren

TypeRoots ist wirklich eine Unterstützung, die wir hinzugefügt haben, um die Kompatibilität mit Typisierungen zu Deshalb haben wir versucht, sie so weit wie möglich aus den Dokumenten herauszuhalten, um Verwirrung zu vermeiden.

@mhegazy Eine unterstützte Funktion mit wenig bis gar keiner Dokumentation liberal um. Zum Beispiel:

_ Hinweis: Diese Funktion dient der Abwärtskompatibilität mit Typisierungen zur Unterstützung der Migration. Weitere Informationen finden Sie in den Versionshinweisen [hier].

Dies wäre vorzuziehen, wenn GitHub-Probleme, StackExchange usw. nach Informationen durchsucht werden müssen.

Thx eine verdammte Tonne @mhegazy ! : tada: Dieser Pfadeintrag für @types war schließlich das fehlende Teil, das meine nicht standardmäßige Projekteinrichtung zum Funktionieren brachte. Ich habe Tage damit verbracht.

Wenn es Ihnen nichts ausmacht, den Startvorgang Ihrer Anwendung etwas zu verlangsamen, können Sie einfach TS_NODE_FILES=true zum Startskript von package.json hinzufügen, und alle benutzerdefinierten Deklarationsdateien werden gefunden.

Ich bekomme jetzt:

The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

und diese Option wird gelöscht.

@KrzysztofMadejski , das von CRA gemacht wird, nicht von TS selbst.

Dieser Thread sagt, dass Typeroots wirklich für die Abwärtskompatibilität ist. Ich versuche es zu verwenden, um Typen für definitiv getippt zu verfassen. Wie sonst würde ich diese Typen ohne Typeroots richtig testen? Ich habe Typen mit dts-gen generiert und types zu meinen Typwurzeln hinzugefügt und immer noch kein Glück :-(

@Roaders Haben Sie die Lösung gefunden, um dts-gen generierte Typen zu verwenden?

Bearbeiten: Gelöst mit https://github.com/microsoft/TypeScript/issues/22217#issuecomment -369783776

Eine Sache, die ich hier nicht verstehe, ist folgende:

tsconfig.base.json:

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

Und eine Verzeichnisstruktur:

/node_modules/@types/something/index.d.ts
/types/something-else/index.d.ts

Es wird überhaupt nicht in meinem nrwl / nx-Repository aufgenommen. Ich kann eine Million Dinge ausprobieren, aber wenn ich diesen Ordner something-else in node_modules/@types , funktioniert es auf magische Weise und wird abgeholt, was darauf hindeutet, dass typeRoots absolut nichts als node_modules/@types bewirkt

Das Markieren von typeRoots als veraltet und das Sagen, dass es auf seltsame / skurrile Weise funktioniert, hätte mich zumindest davon abgehalten, es zu verwenden.

Die einzige Möglichkeit, lokale Typen jedes Mal hinzuzufügen, wenn ich sie benötige, besteht darin, stundenlang mit meiner tsconfig.base.json zu kämpfen und auf den obigen mhegazy-Kommentar zu stoßen

Ich wurde immer wieder davon gebissen und vergaß, dass ich auch die Option paths konfigurieren musste, also erstellte ich ein einfaches Repository mit den richtigen Einstellungen. Hoffe es hilft jemandem.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Antony-Jones picture Antony-Jones  ·  3Kommentare

Roam-Cooper picture Roam-Cooper  ·  3Kommentare

MartynasZilinskas picture MartynasZilinskas  ·  3Kommentare

fwanicka picture fwanicka  ·  3Kommentare

blendsdk picture blendsdk  ·  3Kommentare