Je suis curieux à propos de *.d.ts
à cause d'un débutant en TypeScript. Et quelqu'un m'a dit que ce type de fichier est quelque chose qui ressemble à "fichier principal" en C++, mais uniquement pour JS. Mais je ne peux pas convertir un fichier JS pur en fichier *.d.ts
à moins de changer de force le *.js
en *.ts
. J'ai donc trois fichiers: un fichier JS, un fichier TS et un fichier *.d.ts
.
Quelle est la relation entre eux?
Comment utiliser le fichier *.d.ts
? Est-ce que cela signifie que je peux supprimer le fichier *.ts
de manière permanente?
Si tel est le cas, comment le fichier *.d.ts
peut-il savoir quel fichier JS est mappé sur lui-même?
Merci beaucoup! Ce serait très bien si quelqu'un peut me donner un exemple.
Le fichier "d.ts" est utilisé pour fournir des informations de type TypeScript sur une API écrite en JavaScript. L'idée est que vous utilisez quelque chose comme jQuery ou underscore, une bibliothèque javascript existante. Vous voulez les utiliser à partir de votre code TypeScript.
Plutôt que de réécrire jquery ou underscore ou quoi que ce soit dans TypeScript, vous pouvez plutôt écrire le fichier d.ts, qui ne contient que les annotations de type. Puis, à partir de votre code TypeScript, vous bénéficiez des avantages de la vérification de type statique avec TypeScript, tout en utilisant une bibliothèque JS pure.
d
signifie fichiers de déclaration :
Lorsqu'un script TypeScript est compilé, il est possible de générer un fichier de déclaration (avec l'extension .d.ts) qui sert d'interface aux composants du code JavaScript compilé. Au cours du processus, le compilateur supprime tous les corps de fonctions et de méthodes et ne conserve que les signatures des types exportés. Le fichier de déclaration résultant peut ensuite être utilisé pour décrire les types TypeScript virtuels exportés d'une bibliothèque ou d'un module JavaScript lorsqu'un développeur tiers le consomme à partir de TypeScript.
Le concept de fichier de déclaration est analogue au concept de fichier d’en-tête utilisé en C/C++.
declare module arithmetics {
add(left: number, right: number): number;
subtract(left: number, right: number): number;
multiply(left: number, right: number): number;
divide(left: number, right: number): number;
}
Les fichiers de déclaration de type peuvent être écrits à la main pour les bibliothèques JavaScript existantes, comme cela a été fait pour jQuery et Node.js.
De grandes collections de fichiers de déclaration pour les bibliothèques JavaScript populaires sont hébergées sur GitHub dans DefinitelyTyped et dans le Typings Registry . Un utilitaire de ligne de commande appelé typings est fourni pour vous aider à rechercher et à installer les fichiers de déclaration à partir des référentiels.
Je ne pouvais pas commenter et donc ajouter ceci comme réponse. Nous avons eu du mal à mapper les types existants vers une bibliothèque javascript.
Pour mapper un fichier d.ts sur son fichier javascript, vous devez lui attribuer le même nom que le fichier javascript, le conserver dans le même dossier et pointer le code qui en a besoin sur le fichier d.ts.
par exemple, test.js et test.d.ts sont dans testdir, puis vous l'importez comme ceci dans un composant react:
import * as Test from "./testdir/test";
Le fichier d.ts a été exporté sous forme d’espace de noms, comme suit:
export as namespace Test;
export interface TestInterface1{}
export class TestClass1{}
Exemple travaillé pour un cas spécifique :
Disons que vous avez mon-module que vous partagez via npm .
Vous l'installez avec npm install my-module
Vous l'utilisez ainsi:
import * as lol from 'my-module';
const a = lol('abc', 'def');
La logique du module est tout en index.js
:
module.exports = function(firstString, secondString) {
// your code
return result
}
Pour ajouter des saisies, créez un fichier index.d.ts
:
declare module 'my-module' {
export default function anyName(arg1: string, arg2: string): MyResponse;
}
interface MyResponse {
something: number;
anything: number;
}
Comme @takeshin, cela signifie que .d représente un fichier de déclaration pour TypeScript (.ts).
Peu de points à clarifier avant de continuer à répondre à ce message -
Si vous pensez que TypeScript est simplement un sur-ensemble syntaxique, quels avantages offre-t-il - https://basarat.gitbooks.io/TypeScript/docs/why-TypeScript.html#the-TypeScript-type-system =
Pour répondre à ce message -
Comme nous en avons discuté, TypeScript est un sur-ensemble de javascript et doit être transpilé en javascript. Ainsi, si une bibliothèque ou un code tiers est écrit en TypeScript, il est finalement converti en javascript qui peut être utilisé par un projet javascript, mais l'inverse n'est pas vrai.
Pour ex -
Si vous installez la bibliothèque javascript -
npm install --save mylib
et essayez de l'importer dans du code TypeScript -
import * from "mylib";
vous aurez une erreur.
"Impossible de trouver le module 'mylib'."
Comme mentionné par @Chris, de nombreuses bibliothèques telles que underscore, Jquery sont déjà écrites en javascript. Plutôt que de réécrire ces bibliothèques pour des projets TypeScript, une autre solution était nécessaire.
Pour ce faire, vous pouvez fournir un fichier de déclaration de type dans la bibliothèque javascript nommée * .d.ts, comme dans le cas précédent mylib.d.ts. Le fichier de déclaration fournit uniquement les déclarations de type des fonctions et des variables définies dans le fichier javascript correspondant.
Maintenant quand tu essaies -
import * from "mylib";
mylib.d.ts est importé et joue le rôle d'interface entre le code de bibliothèque javascript et le projet TypeScript.