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.
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
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:
Installez l'outil typings
avec npm:
npm install -g typings
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.
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/
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.