Getting error TS2304: Cannot find name 'Buffer'

后端 未结 5 1605
Happy的楠姐
Happy的楠姐 2020-12-08 06:38

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 compil

相关标签:
5条回答
  • 2020-12-08 07:19

    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:

    1. Install the typings tool with npm:

      npm install -g typings

    2. 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.

    1. Now all you have to do is adding index.d.ts as a triple-slash directive within your code (which uses the Buffer 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/

    0 讨论(0)
  • 2020-12-08 07:20

    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.

    0 讨论(0)
  • 2020-12-08 07:35

    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

    0 讨论(0)
  • 2020-12-08 07:35

    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!

    0 讨论(0)
  • 2020-12-08 07:37

    For Angular users:

    1. Run the following command

    npm install --save @types/node

    1. In your tsconfig.app.json file, add these two lines to the CompilerOptions:
    "compilerOptions": {
        //...
        "types": ["node"],
        "typeRoots": ["node_modules/@types"]
      }
    
    0 讨论(0)
提交回复
热议问题