2017-07-31 1 views
1

J'utilise Moment.js pour gérer des objets datetime dans mon projet TypeScript. Je voudrais définir un type d'objet qui a une clé avec une valeur d'un type Moment.Comment importer un type externe dans le fichier .d.ts global

Toutefois, lorsque j'ajoute ce qui suit dans un fichier de définition global (test.d.ts), aucune des interfaces de ce fichier ne se trouve dans le projet.

import { Moment } from 'moment'; 

interface Test { 
    date: Moment; 
} 

Lorsque je tente d'utiliser l'interface dans un .ts ou .tsx fichier que je reçois cette erreur dactylographiée:

[at-loader] ./src/<examplefilename>.tsx:91:26 
    TS2304: Cannot find name 'Test'. 

Ni vérification ni TSLint d'erreur dactylographiée de VSCode montrent des problèmes avec le code.

Comment puis-je importer un type à partir d'un module externe pour l'utiliser dans un fichier de définition globale?

+0

Je voudrais vérifier le fichier tsconfig. Dans les options du compilateur - typeroots vous devriez avoir le chemin @types et le chemin de vos dactylographies – kimy82

+0

@ kimy82, je ne pense pas que le problème soit là. Je peux très bien importer le moment tout au long de mon projet mais je suis incapable de l'importer dans les fichiers de définition '.d.ts' de mon projet pour définir un type global dans mon projet qui utilise le type' Moment'. Le reste de mes fichiers '.d.ts' sont trouvés sans configuration et fonctionnent tant que je n'essaie pas d'importer un type externe. – keawade

+0

Le fichier 'd.ts' avec le global est-il également inclus dans votre projet' tsconfig.json'? –

Répondre

2

Lorsque le fichier a l'instruction de niveau supérieur import ou export, il est considéré comme un module. Tout son contenu (types, interfaces, etc.) qui vous intéresse doit être exporté explicitement dans ce fichier et importé dans les fichiers qui en ont besoin.

// types.d.ts 
import { Thingy } from 'sick-lib'; 

export declare interface IInterface { 
    foo: any; 
    bar: any; 
    baz: Thingy; 
} 

// main.ts 
import { IInterface } from 'types'; 

const xyz: IInterface = { 
    foo: true, 
    bar: false 
}; 
+0

Cela résout le problème, merci! Il est un peu frustrant d'avoir à exporter toutes mes interfaces manuellement maintenant juste parce que j'ai importé une chose cependant. – keawade