7

Sto sviluppando un server di backend che utilizza SailsJS. In pratica, inietta tutti i servizi helper del modello, nonché i miei servizi nello spazio dei nomi globale. Mi piacerebbe molto se fossi in grado di ottenere Intellisense per quei servizi.Come utilizzare le definizioni Typescript per ottenere Intellisense per i miei servizi Javascript in VS Code?

Prima ho impostato digitazioni e ho installato definizioni di tipo globale per lodash e nodo. Funziona come un vero e proprio fascino dopo aver creato un file jsconfig.json e tsconfig.json jvonfig.json .

Avanti Volevo creare un file di definizioni di base per i miei servizi. Ho creato una directory in tipizzazioni/globali con di file in esso index.d.ts:

declare namespace foo { 
    export function bar(); 
} 
declare var baz: { some: number }; 

Questo è solo per assicurarsi che non perdo le definizioni tempo a scrivere se non funziona .

Poi ho compreso che index.d.ts di file in tipizzazioni/index.d.ts con l'aggiunta di un tag di riferimento:

/// <reference path="globals/psiewakacje/index.d.ts" /> 

Con mia grande sorpresa, non funziona nel mio progetto di File Javascript Dopo aver digitato foo. o baz. non ho alcun Intellisense ragionevole.

 

L'unico supporto Intellisense sono stato in grado di ottenere è stato quando ho importato tali servizi in ogni file tramite:

import * as InternalParser from '../services/InternalParser'; 

o

var InternalParser = require('../services/InternalParser'); 

ma questo non fa uso I file di definizione di Typescript mi ​​danno solo le proprietà esportate. Nel complesso, un risultato non desiderabile.

 

mi chiedo come farlo funzionare correttamente. Ho esaminato i file di definizione del tipo di node e lodash e hanno fatto lo stesso: dichiarare una variabile/spazio dei nomi con un tipo specifico. Tuttavia, le loro definizioni funzionano in Javascript e la mia no. Come farlo bene?

risposta

0

Non è necessario aggiungere un riferimento a typings/index.d.ts. Il modo più semplice sarebbe semplicemente aggiungere le dichiarazioni a un file di dichiarazione globale, ovunque nel progetto.

Inoltre, anziché utilizzare var e namespace, utilizzare solo interface.

Es.nella radice della directory, è possibile aggiungere facilmente

// index.d.ts 
interface Foo { 
    bar:() => void 
} 

interface Baz { some: number } 
0

ho avuto lo stesso problema e ha scoperto che l'editor (VSCode) era alla ricerca nella directory sbagliata per il file, problema è stato risolto con relativo riferimento il percorso corretto , il percorso specifico varierà, ma nel mio esempio era:

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

index.d.ts contiene quanto segue:

/// <reference path="globals/core-js/index.d.ts" /> 
/// <reference path="globals/jasmine/index.d.ts" /> 
/// <reference path="globals/node/index.d.ts" /> 

e la mia struttura di directory/file appare come f ollows:

enter image description here

+0

Per me il problema non sta ottenendo l'Intellisense per moduli personalizzati, non quelli installati con tipizzazioni, così purtroppo questa non è la soluzione per me. Grazie per aver provato, però! – Voreny

+0

Ah capito! Ti farò sapere se trovo qualcos'altro che potrebbe aiutarti. – Joelster