web-dev-qa-db-fra.com

Obtenir l'erreur TS2304: Impossible de trouver le nom 'Tampon'

J'essaye de coder en base64 dans NodeJS en utilisant TypeScript. 

Le code suivant fonctionne correctement en JavaScript.

Quand j'écris la même chose dans TypeScript et que je compile, j'obtiens Buffer is not find error.

var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');

Quelqu'un peut-il m'aider à faire la même chose dans TypeScript.

17
ayyappa maddi

Ajoutez cette ligne en haut:

declare const Buffer

et il devrait compiler sans erreurs.

Les déclarations sont nécessaires pour utiliser les bibliothèques intégrées au noeud ou d'autres objets globaux. Vous pouvez le déclarer manuellement comme ci-dessus.

Avec la nouvelle version de TypeScript, vous pouvez également utiliser les fichiers de déclaration officiels:

npm i -g TypeScript@next
npm i --save-dev @types/node

pour les autres bibliothèques, installez @types/library_name.

plus de détails: Améliorer l'acquisition de fichiers de déclaration , L'avenir des fichiers de déclaration

31
DarkKnight

Prologue

Buffer fait partie de l'API Node.js . Comme TypeScript ne connaît pas les classes de Node.js par défaut, vous devrez installer files de déclaration (définitions de type) pour Node.js.

Si l'erreur suivante apparaît, vous devrez installer les définitions de type manuellement:

erreur TS2304: Impossible de trouver le nom 'Tampon'.

Installation des définitions de type

Vous pouvez installer les définitions de type à l’aide de typings tool. Je vais vous montrer comment faire ceci:

  1. Installez l'outil typings avec npm: 

    npm install -g typings

  2. Installez les définitions de type pour Node.js à partir du référentiel DefinitelyTyped (~dt):

    typings install dt~node --global --save

L'outil de saisie créera le répertoire suivant "typings/globals/node" et le liera dans "typings/index.d.ts". Il y aura également un fichier appelé typings.json (en raison de l'option --save), qui fait référence aux définitions de type résolues:

{
  "globalDependencies": {
    "node": "registry:dt/node#6.0.0+20160621231320"
  }
}

Remarque: Si l'erreur "typings\globals\node\index.d.ts (71,26): erreur TS1110: type attendu" s'affiche, votre définition de Node.js est trop récente. L'outil de typage a des problèmes avec les dernières déclarations de type . Dans ce cas, il suffit de vérifier la version dans votre fichier typings.json. Pour moi, node#6.0.0+20160621231320 fonctionnait mais node#6.0.0+20161212163245 ne l'était pas.

  1. Il ne vous reste plus qu'à ajouter index.d.ts sous la forme d'une directive triple-slash dans votre code (qui utilise la classe Buffer):

_ {YourClass.ts} _

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

export class YourClass {

  private static toString(encoded: string): string {
    return new Buffer(encoded, "base64").toString();
  }

}

METTRE À JOUR:

Avec la version de TypeScript 2.0 , un nouveau système de définitions de types a été annoncé.

Vous pouvez maintenant oublier l'outil typings. Tout ce que vous avez à faire est d’exécuter cette commande pour installer Définitions TypeScript pour Node.js :

npm install --save @types/node

Assurez-vous également que vous avez les entrées suivantes dans votre tsconfig.json:

{
  "compilerOptions": {
    "moduleResolution": "node",
    ...
  },
  "exclude": [
    "node_modules",
    ...
  ]
}

P.S. Si vous avez besoin de définitions de types pour d’autres classes (que celles incluses dans Node.js), vous pouvez les rechercher ici: http://Microsoft.github.io/TypeSearch/

18
Benny Neugebauer

Le tampon provient de l'espace de noms Node. Première installation

npm install --save @types/node 

puis ajoutez le code ci-dessous à votre fichier tsconfig.json dans la section compilerOptions

"types": ["node"],
"typeRoots": ["node_modules/@types"]

typeRoots spécifie une liste de répertoires pour les fichiers de définition de type à inclure. Il nécessite TypeScript version 2.0 ou ultérieure.

3
abedfar