得到错误TS2304:找不到名称' Buffer'

时间:2016-08-10 13:51:54

标签: node.js typescript types typescript1.8 typescript1.4

我正在尝试使用TypeScript在NodeJS中执行base64编码。

以下代码在JavaScript中正常运行。

当我在TypeScript中编写相同的东西并进行编译时,我发现缓冲区找不到错误。

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

有人可以帮我在TypeScript中做同样的事情。

6 个答案:

答案 0 :(得分:32)

在顶部添加此行:

declare const Buffer

它应该编译没有错误。

使用内置库或其他全局对象的节点需要声明,您可以像上面一样手动声明它。

使用新版本的Typescript,您还可以使用官方声明文件:

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

对于其他库,请安装@types/library_name

更多详情:Improve Declaration File AcquisitionThe Future of Declaration Files

答案 1 :(得分:19)

<强>序言

BufferNode.js API的一部分。由于TypeScript默认情况下不知道Node.js中的类,因此您需要为Node.js安装declaration files(类型定义)。

如果您看到以下错误,则必须手动安装类型定义:

  

错误TS2304:找不到名称&#39;缓冲区&#39;。

安装类型定义

您可以使用typings工具安装类型定义。我会告诉你如何做到这一点:

  1. 使用npm:

    安装typings工具

    npm install -g typings

  2. DefinitelyTyped~dt)存储库安装Node.js的类型定义:

    typings install dt~node --global --save

  3. 打字工具将创建以下目录&#34; typings/globals/node&#34;并将其链接到&#34; typings/index.d.ts&#34;。还会有一个名为typings.json的文件(由于--save选项),它引用了已解析的类型定义:

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

    注意:如果您看到错误&#34; typings \ globals \ node \ index.d.ts(71,26):错误TS1110:预期类型&#34;,那么您的Node.js定义太新了。打字工具有issues with latest type declarations。在这种情况下,只需检查typings.json文件中的版本即可。对我来说node#6.0.0+20160621231320正在运作,但node#6.0.0+20161212163245没有。

    1. 现在,您只需在代码中添加index.d.ts作为triple-slash directive(使用Buffer类):
    2. YourClass.ts

      /// <reference path="../../typings/index.d.ts" />
      
      export class YourClass {
      
        private static toString(encoded: string): string {
          return new Buffer(encoded, "base64").toString();
        }
      
      }
      

      <强>更新

      使用release of TypeScript 2.0新的类型定义系统已经公布。

      您现在可以忘记typings工具了。您需要做的就是运行此命令来安装TypeScript definitions for Node.js

      npm install --save @types/node

      另请确保您的tsconfig.json

      中包含以下条目:
      {
        "compilerOptions": {
          "moduleResolution": "node",
          ...
        },
        "exclude": [
          "node_modules",
          ...
        ]
      }
      

      P.S。如果您需要其他类的类型定义(包含在Node.js中),您可以在此处搜索它们:http://microsoft.github.io/TypeSearch/

答案 2 :(得分:4)

对于IONIC 4开发人员,我使用

安装了它 jQuery(window).resize();

当我尝试添加npm install --save @types/node时,如下所示

"types": ["node"]



"compilerOptions": { "outDir": "./out-tsc/app", "types": ["node"] },

它不起作用。我必须将条目添加到

tsconfig.json

请参考以下链接以获取相关文档。
https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-291658668

让我知道这是否对您有用!

答案 3 :(得分:3)

缓冲区来自Node命名空间。首次安装

npm install --save @types/node

然后在compilerOptions部分的tsconfig.json文件中添加以下代码

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

typeRoots指定要包含的类型定义文件的目录列表。它需要TypeScript 2.0或更高版本。

答案 4 :(得分:3)

对于Angular用户:

  1. 运行以下命令

npm install --save @types/node

  1. 在您的tsconfig.app.json文件中,将这两行添加到CompilerOptions中:
"compilerOptions": {
    //...
    "types": ["node"],
    "typeRoots": ["node_modules/@types"]
  }

答案 5 :(得分:0)

要在Karma / Jasmine中解决此问题

  1. 运行

npm install --save @types/node

  1. 在您的tsconfig.spec.json文件中,将这两行添加到CompilerOptions中:
"compilerOptions": {
    //...
        "types": [ "jasmine" , "node" ],
        "typeRoots": ["node_modules/@types"]
  }