Getting error TS2304: Cannot find name 'Buffer'
Solution 1
Add this line at top:
declare const Buffer
and it should compile without errors.
Declarations is required to use node built in libraries or other global objects, you can manually declare it like above.
With new version of Typescript, you can also use official declaration files:
npm i -g typescript@next
npm i --save-dev @types/node
for other libraries, install @types/library_name
.
more details: Improve Declaration File Acquisition, The Future of Declaration Files
Solution 2
For the IONIC 4 developers, I installed it using
npm install --save @types/node
When I tried adding "types": ["node"]
as shown below
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": ["node"]
},
to the
tsconfig.json
it did not work. I had to add the entry to
tsconfig.app.json
Please refer to the following link for relevant documentation.
https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-291658668
Let me know if that worked for you!
Solution 3
Prologue
Buffer is part of the Node.js API. Because TypeScript doesn't know classes from Node.js by default, you will need to install declaration files (type definitions) for Node.js.
If you see the following error, you will have to install type definitions manually:
error TS2304: Cannot find name 'Buffer'.
Installing Type Definitions
You can install type definitions using the typings tool. I will show you how to do this:
-
Install the
typings
tool with npm:npm install -g typings
-
Install type definitions for Node.js from the DefinitelyTyped (
~dt
) repository:typings install dt~node --global --save
The typings tool will create the following directory "typings/globals/node
" and link it in "typings/index.d.ts
". There will be also a file called typings.json
(because of the --save
option), which references the resolved type definitions:
{
"globalDependencies": {
"node": "registry:dt/node#6.0.0+20160621231320"
}
}
Note: If you see the error "typings\globals\node\index.d.ts(71,26): error TS1110: Type expected", then your Node.js definition is too recent. The typings tool has issues with latest type declarations. In such a case, just check the version in your typings.json
file. For me node#6.0.0+20160621231320
was working but node#6.0.0+20161212163245
was not.
- Now all you have to do is adding
index.d.ts
as a triple-slash directive within your code (which uses theBuffer
class):
YourClass.ts
/// <reference path="../../typings/index.d.ts" />
export class YourClass {
private static toString(encoded: string): string {
return new Buffer(encoded, "base64").toString();
}
}
UPDATE:
With the release of TypeScript 2.0 a new type definitions system has been announced.
You can now forget about the typings
tool. All you need to do is running this command to install TypeScript definitions for Node.js:
npm install --save @types/node
Please also make sure that you have the following entries in your tsconfig.json
:
{
"compilerOptions": {
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
...
]
}
P.S. If you need type definitions for other classes (than included in Node.js), you can search for them here: http://microsoft.github.io/TypeSearch/
Solution 4
Buffer is from Node
namespace. First install
npm install --save @types/node
then add below code to your tsconfig.json
file inside the compilerOptions
section
"types": ["node"],
"typeRoots": ["node_modules/@types"]
The typeRoots
entry specifies a list of directories for type definition files to be included. It requires TypeScript version 2.0 or later.
Solution 5
For Angular users:
- Run the following command
npm install --save @types/node
- In your
tsconfig.app.json
file, add these two lines to the CompilerOptions:
"compilerOptions": {
//...
"types": ["node"],
"typeRoots": ["node_modules/@types"]
}
Related videos on Youtube
ayyappa maddi
Updated on January 20, 2021Comments
-
ayyappa maddi over 3 years
I am trying to do base64 encode in NodeJS using TypeScript.
Following code working fine in JavaScript.
When I am writing same thing in TypeScript and compiling, I am getting Buffer is not find error.
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
Can someone help me to do same thing in TypeScript.
-
Keerthivasan almost 7 yearsI guess this would be apt -
npm i --save-dev @types/node
. Dev dependencies! -
JasonPerr over 6 yearsI've been fighting this for days and this is the first time I've seen a solution that actually works with a windows 10 environment. Thanks!
-
JasonPerr over 6 yearsUnfortunately, as nice as this is for fixing my windows environment issues it broke OSX environments. ;( Getting a typescript error: Typescript Error Subsequent variable declarations must have the same type. Variable 'extensions' must be of type 'any', but here has type 'NodeExtensions'.
-
Jeremy Walters over 5 yearsInstalling @type/node
npm install --save @types/node
, wasn't suffice. I had to add"types": ["node"]
to mytsconfig.json
. Thank you -
zakaria amine almost 5 yearsI followed all the steps, but still getting the error
-
zakaria amine almost 5 yearsI found the solution, (I am using Angular), the
src/tsconfig.app.json
has to be updated rather thantsconfig.json
, here is a reference to the issue in Github: github.com/aws/aws-sdk-js/issues/1271#issuecomment-320352814 -
deanwilliammills over 4 yearsLegend. Thanks!
-
IntegraStudio over 3 yearsLegend. Thanks!
-
EGC about 3 yearsLegend. Thanks!
-
ceruleus over 2 yearsLegend. Thanks!
-
Adam over 2 yearsLegend. Thanks!
-
danwellman over 2 yearsWell, that didn't work in an Angular 12 app. Installed the types, added to tsconfig.app.json, but still seeing "Buffer is not defined" in the browser console :/
-
Neyt over 2 years@danwellman if you found a solution, can you provide it here please ? :D
-
Cameron Hudson almost 2 yearsNode's Buffer class doesn't exist in a browser context, so web frontends need to use a different approach. One such approach is described in this answer: stackoverflow.com/a/72540058/7023816