web-dev-qa-db-ja.com

エラーTS2304を取得:名前 'Buffer'が見つかりません

TypeScriptを使用してNodeJSでbase64エンコードを実行しようとしています。

JavaScriptで正常に動作する次のコード。

TypeScriptで同じことを書いてコンパイルすると、Buffer is find notエラーが発生します。

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

誰かがTypeScriptで同じことをするのを手伝ってくれますか?.

20
ayyappa maddi

この行を上部に追加します。

declare const Buffer

エラーなしでコンパイルする必要があります。

ライブラリまたは他のグローバルオブジェクトに組み込まれたノードを使用するには宣言が必要です。上記のように手動で宣言できます。

TypeScriptの新しいバージョンでは、公式の宣言ファイルも使用できます。

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

他のライブラリの場合、@types/library_name

詳細: 宣言ファイルの取得の改善宣言ファイルの未来

34
DarkKnight

プロローグ

BufferNode.js API の一部です。 TypeScriptはデフォルトでNode.jsのクラスを認識しないため、Node.jsの 宣言ファイル (タイプ定義)をインストールする必要があります。

次のエラーが表示される場合、タイプ定義を手動でインストールする必要があります。

エラーTS2304:名前 'Buffer'が見つかりません。

タイプ定義のインストール

typings ツールを使用して、タイプ定義をインストールできます。これを行う方法を紹介します。

  1. Npmでtypingsツールをインストールします。

    _npm install -g typings_

  2. DefinitelyTyped (_~dt_)リポジトリからNode.jsのタイプ定義をインストールします。

    _typings install dt~node --global --save_

タイピングツールは、次のディレクトリ「_typings/globals/node_」を作成し、「_typings/index.d.ts_」にリンクします。解決された型定義を参照する_typings.json_(_--save_オプションのため)というファイルもあります。

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

注:「typings\globals\node\index.d.ts(71,26):エラーTS1110:Type expected」というエラーが表示される場合、Node.jsの定義が最近のものです。タイピングツールには 最新の型宣言の問題 があります。このような場合は、_typings.json_ファイルのバージョンを確認するだけです。私にとって_node#6.0.0+20160621231320_は機能していましたが、_node#6.0.0+20161212163245_は機能していませんでした。

  1. あとは、コード内で トリプルスラッシュディレクティブ として_index.d.ts_を追加するだけです(Bufferクラスを使用します)。

YourClass.ts

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

export class YourClass {

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

}
_

UPDATE:

TypeScript 2.0のリリース では、新しい型定義システムが発表されました。

これで、typingsツールを忘れることができます。必要なことは、このコマンドを実行して Node.jsのTypeScript定義 をインストールすることだけです。

_npm install --save @types/node_

_tsconfig.json_に次のエントリがあることも確認してください。

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

追伸(Node.jsに含まれる)他のクラスの型定義が必要な場合は、ここで検索できます: http://Microsoft.github.io/TypeSearch/

20

バッファはNode名前空間からのものです。最初のインストール

npm install --save @types/node

次に、compilerOptionsセクション内のtsconfig.jsonファイルに以下のコードを追加します

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

typeRootsエントリは、含めるタイプ定義ファイルのディレクトリのリストを指定します。 TypeScriptバージョン2.0以降が必要です。

5
abedfar