204 votes

Comment configurer personnalisé global (interfaces.d.les fichiers ts) pour le Tapuscrit?

J'ai été aux prises avec ce problème depuis quelques heures et je n'arrive pas à trouver quelque chose sur internet qui permettrait d'expliquer clairement ce, soi-disant, concept simple.

Je suis actuellement en train de travailler sur un ReactJS projet qui utilise Webpack2 et Tapuscrit. Tout fonctionne parfaitement à l'exception d'une chose: je n'arrive pas a trouver un moyen de déplacer les interfaces que j'ai écrit moi-même dans des fichiers séparés afin qu'elles soient visibles pour l'ensemble de l'application.

À des fins de prototypage j'ai d'abord eu les interfaces définies dans les fichiers qui les utilisent, mais finalement, j'ai commencé l'ajout de certains qui ont été nécessaires dans plusieurs classes, et c'est alors que tous les problèmes ont commencé. Quelles que soient les modifications que je fais sur mes tsconfig.json et n'importe où j'ai mis les fichiers de mon IDE et Webpack à la fois se plaindre de ne pas être en mesure de trouver des noms (Could not find name 'IMyInterface').

Voici mon actuel tsconfig.json le fichier:

{
  "compilerOptions": {
    "baseUrl": "src",
    "outDir": "build/dist",
    "module": "commonjs",
    "target": "es5",
    "lib": [
      "es6",
      "dom"
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./typings"
    ],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": "src",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": false,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true
  },
  "exclude": [
    "node_modules",
    "build",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts"
  ],
  "types": [
    "typePatches"
  ]
}

Comme vous pouvez le voir, mon tsconfig.json est à la racine du répertoire du projet, tous les source est en ./src, j'ai placé ma personnalisée .d.ts fichiers en ./typings et typeRoots.

Je l'ai testé avec Tapuscrit 2.1.6 et 2.2.0 et aucun ne fonctionne.

Une façon de contracter le tout est de déplacer mon typings annuaire en src puis import {IMyInterface} from 'typings/blah' mais qui ne se sentent pas le droit de me que ce n'est pas quelque chose que je dois utiliser. Je veux ces interfaces d'être juste la 'magie' disponible tout au long de ma demande.

Edit: Voici un exemple d' app.d.ts le fichier:

interface IAppStateProps {
}

interface IAppDispatchProps {
}

interface IAppProps extends IAppStateProps, IAppDispatchProps {
}

Ai-je besoin d' export ou peut - declare? J'espère que je n'ai pas à les envelopper dans un espace de noms?!

371voto

dtabuenc Points 2368

"Comme par magie les interfaces disponibles" ou global types est fortement déconseillée et doit surtout être laissé pour héritage. Aussi, vous ne devriez pas utiliser ambiante déclaration de fichiers (par exemple, d.ts fichiers) pour le code que vous écrivez. Ces dernières ont pour but de mettre à la place de l'externe non-tapuscrit de code (essentiellement de remplissage dans le tapuscrit types dans le code js de sorte que vous pouvez mieux l'intégrer avec javascript).

Pour le code que vous écrivez, vous devriez être en utilisant un .ts fichiers pour définir vos interfaces et types.

Bien que les types sont découragés, la réponse à votre question est qu'il existe deux types d' .ts fichiers en caractères d'imprimerie. Ceux-ci sont appelés scripts et modules.

Rien en script sera mondiale. Donc, si vous définissez vos interfaces dans un script, il sera disponible dans le monde entier tout au long de votre application (tant que le script est inclus dans la compilation, soit par ///<reference path=""> tags ou par l'intermédiaire d' files:[] ou includes:[] ou la valeur par défaut **/*.ts votre tsconfig.json.

L'autre type de fichier est "module", et rien en module sera privé pour le module. Si vous exportez quelque chose à partir d'un module, il sera disponible pour les autres modules si les autres modules choisi pour l'importer.

Ce qui fait un .ts le fichier d'un "script" ou un "module"? Bien.... si vous utilisez import/export n'importe où dans le fichier, ce fichier devient un "module". Si il n'y a aucun import/export des déclarations, alors c'est un script global.

Ma conjecture est que vous avez utilisés par inadvertance import ou export dans vos déclarations et dans un module, qui s'est avéré toutes vos interfaces privé au sein de ce module. Si vous voulez être mondial, puis vous assurez-vous que vous n'êtes pas en utilisant l'importation/exportation des états au sein de votre fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X