javascript - Hur man använder en d.ts-fil för intellisense i VS Code på ett sätt som liknar NPM-metoden
Jag har ett Node.js-projekt (i JS). Tyvärr måste jag använda många globala Node-variabler.
Allt fungerar bra (även om många människor föreslår att man inte ska använda globala variabler) förutom en sak:
Det finns ingen intellisense för globala. Så varje gång jag vill använda, låt oss säga, en global funktion/objekt måste jag titta i dess kod och lista ut vilka parametrar den har, vad den returnerar, etc.
Säg att jag har en global variabel som är ett rent objekt:
foo = {
bar: {
level2: {
level3: {
level4: "abc
}
}
}
}
Det är ganska irriterande att hantera det eftersom jag inte kan "se" objektets struktur när jag använder det och det är lätt att göra ett misstag när man skriver kod.
Anledningen till att jag postade den här frågan är ...npm-paketen
Det finns gott om paket skrivna i vanlig JS och de flesta av dem använder kraften hos d.ts-filer. När du installerar paketet kan du använda det från vilken plats som helst i dina projekt och VS Code kommer att ha intellisense för dem. Om du klickar på tooltip (jag vet inte vad det kallas... Type definition tooltip?) i VS Code kommer du att navigeras till paketets d.ts-fil (inte den faktiska implementationen av kommandot).
Så min fråga är hur man gör samma sak i mitt projekt. Jag tänker inte publicera det som npm, jag vill bara ha en d.ts-fil någonstans i projektet så att jag kan använda min global utan att behöva titta på dess implementation varje gång jag behöver komma ihåg vad den gör.
Svar #1
Låt inuti din .d.ts-fil vara vad som helst
För att komma åt variabler, funktioner, gränssnitt, lägg till den här raden i din .ts-fil, VS Code IntelliSense kommer att föreslå åt dig
/// <reference path="./test.d.ts" />
Om du vill använda denna test.d.ts i hela ditt projekt, inte bara i någon särskild fil, lägg då till denna rad i tsconfig.json
"files" : [ "./src/test.d.ts" ]
Uppdatering som nämnts i kommentarsfältet
min js-fil som jag antar liknar det du försöker göra
export const testString = 'aditya';
i din js-fil du
/// <reference path="test.js" />
Svar #2
Oavsett om det är möjligt eller inte, är den största nackdelen med det du letar efter att deklarationsfilen/filerna måste uppdateras för hand varje gång en global variabel/funktion ändras.
Det finns gott om paket skrivna i vanlig JS och de flesta av dem använder kraften i d.ts-filer.
Vanligtvis skrivs inte .d.ts-filer för hand, utan produceras av tsc: många av de paket du nämner är förmodligen skrivna i TypeScript och distribueras som JavaScript-paket (för att användas i JavaScript-projekt också) med en tillhörande index.d.ts-fil (för att användas i TypeScript-projekt)
även många människor föreslår att man inte ska använda globala variabler
+1
