web-dev-qa-db-fra.com

Modules Typescript 1.8: importez tous les fichiers du dossier

Je construis une grande bibliothèque avec TypeScript avec comme 100 fichiers ts séparés. Auparavant, j'utilisais module d'exportation XXX (renommé espace de noms d'exportation XXX plus tard) pour toutes mes classes, mais comme le disent les livres, ce n'est pas une méthode recommandée, je devrais utiliser à la place l'importation .

J'ai donc essayé d'importer. Cela a bien fonctionné:

import * as mylib from "./source/source.ts";

Mais comme j'ai 100 fichiers, je ne veux pas ajouter une telle ligne pour chacun d'eux. Et je veux que toutes mes classes soient accessibles via la variable mylib.

J'ai donc essayé ceci:

import * as mylib from "./source/";

Mais dès que je fais cela, j'obtiens: Impossible de trouver le module './source/'

Existe-t-il un moyen d'importer toutes les classes à partir d'un dossier contenant plusieurs fichiers avec une seule ligne?

26
zeroin

Les deux stratégies de résolution de module fournies par tsc ne prennent pas en charge un tel comportement. Quelle est votre déclaration d'importation souhaitée

import * as mylib from "./source/";

fait est d'effectuer des vérifications dans cet ordre:

1. (does package.json have a typings key? If so, import this file)
2. import * as mylib from "./source/index.ts";
3. import * as mylib from "./source/index.tsx";
4. import * as mylib from "./source/index.d.ts";

Je suppose que vous utilisez ici une résolution de module de style nœud, ce que vous êtes probablement car c'est la méthode recommandée. Consultez la documentation TypeScript docs pour plus de détails sur la façon dont la résolution du module est effectuée dans TypeScript.

Généralement, ce que vous essayez d'accomplir, c'est de créer un index.d.ts fichier, qui sert de point d'entrée à partir duquel vous exportez le reste de vos modules. J'utilise angular2 comme exemple: votre importation angular2 commune ressemble à ceci:

import { Injectable } from '@angular/core'

core est juste un répertoire qui vit à l'intérieur du @angular répertoire. Tout comme votre répertoire source. Cependant, dans le répertoire principal réside un index.d.ts fichier:

/**
 * @module
 * @description
 * Starting point to import all public core APIs.
 */
export * from './src/metadata';
export * from './src/util';
export * from './src/di';
....
32
Georg Grab