Projekt-Setup
Damit VS Code die Typings findet, braucht unser Workspace drei Dinge: eine jsconfig.json im Root, den Ordner typings/ mit den .d.ts-Dateien von otris und den Ordner typings_dexpro/ mit unseren eigenen Deklarationen. jsconfig.json und typings/ legt die DOCUMENTS-Extension (vscode-documentsos) beim Einrichten des Projekts an, typings_dexpro/ pflegen wir selbst.
jsconfig.json
Die jsconfig.json sagt VS Code, welche Dateien zum Projekt gehören und welche JavaScript-Version gilt. Unsere aktuelle Konfiguration:
{
"compilerOptions": {
"checkJs": true,
"alwaysStrict": true,
"target": "es2016",
"lib": ["es2016", "scripthost"],
"baseUrl": ".",
"paths": {
// ... weitere Bibliotheken
},
"typeRoots": ["./typings"]
},
"include": [
"node_modules/@types/**/*.d.ts",
"src/**/*.js",
"src/**/*.mjs",
"typings/**/*.d.ts",
"typings_dexpro/**/*.d.ts"
]
}
includebindet unsere Skripte (.jsund.mjsinsrc/), die otris-Typings (typings/) und unsere eigenen (typings_dexpro/) ein. Nur was hier steht, kennt IntelliSense.liblässt bewusstdomweg. Sonst kollidieren die Browser-KlassenFileundDocumentmit den gleichnamigen DOCUMENTS-Klassen.target: es2016schaltet Autovervollständigung für ES6-Features wieMapoderfor...offrei. Achtung: Nicht alles davon unterstützt der DOCUMENTS-Server.checkJs: trueprüft jede Datei ausincludeauf Typfehler, nicht nur für IntelliSense. Die Meldungen erscheinen in der Problems-Ansicht.alwaysStrict: trueprüft jede Datei so, als stünde"use strict"darüber. Das ist nur Linting: Auf dem Server läuft ein Skript erst strikt, wenn"use strict";im Skript selbst steht.baseUrl+pathsordnen Modulnamen Dateien zu: unsere Bibliotheken (DexRecordLib→src/…) und Typings, deren Dateiname vom Modulnamen abweicht (gadgetAPI→gadgetApi.d.ts).typeRootssorgt dafür, dass Typings mit gleichem Datei- und Modulnamen (otrAssert,util.otrLogger) auch ohnepaths-Eintrag gefunden werden.
Der Ordner typings/
|
Datei |
Inhalt |
Woher |
|---|---|---|
|
|
Die komplette PortalScripting-API: |
Extension |
|
|
Erweiterungen im Namespace |
Extension |
|
|
Gadget-API im Namespace |
Extension |
|
|
Client-SDK |
Extension |
|
|
Unsere Mappentypen, Felder, Register und Ordnernamen, erzeugt aus dem DOCUMENTS-Server |
Generiert aus dem Server |
|
|
Typings der otris-Bibliotheken (mit deutscher Doku) |
Mit den Bibliotheken ausgeliefert |
Wichtig: Die Dateien in typings/ werden nicht von Hand bearbeitet, denn die Extension überschreibt sie beim nächsten Aktualisieren. Eigene Typen gehören in JSDoc-Kommentare im Skript oder in unseren Ordner typings_dexpro/ (siehe "Bibliotheken und eigene .d.ts-Dateien").
Aktualisiert werden die Typings über die Befehlspalette (Cmd/Strg+Shift+P) oder per Rechtsklick auf den Ordner typings/ im Explorer:
- documentsOS: Install Typings installiert die Standard-Typings der API (Rechtsklick auf das Projekt-Root).
- documentsOS: Get Typings lädt die API-Typings passend zur Serverversion.
- documentsOS: Get File Type Typings erzeugt
fileTypes.d.tsneu aus den Mappentypen des Servers. Nach jeder Änderung an Mappentypen oder Feldern ausführen.
Typprüfung
In unserem Workspace ist die Prüfung projektweit an: checkJs und alwaysStrict stehen auf true. Das empfehlen wir für jeden DOCUMENTS-Workspace. Ein // @ts-check am Dateianfang ist damit nicht nötig.
- Einzelne Datei ausnehmen:
// @ts-nocheckals erste Zeile. Nur als Übergang für Altskripte und mit Kommentar, warum. - Was
alwaysStrictzusätzlich findet: Code, der im Strict Mode verboten ist, z.B.deleteauf einer Variablen (4 Stellen inDEXPRO__DbLib.js), Oktal-Literale wie010oder doppelte Parameternamen. - Ausgangslage: TypeScript 6.0.3 meldet mit diesen Einstellungen rund 3.200 Fehler in unseren Skripten, ohne
src/decrypted.catgezählt. Die häufigsten Ursachen stehen unter "Stolperfallen".
Neue Skripte gehen nur ohne Meldungen in der Problems-Ansicht auf den Server.