我正在尝试使用TypeScript在NodeJS中进行base64编码。
以下代码在JavaScript中可以正常工作。
当我在TypeScript中编写相同的代码并进行编译时,我会得到“Buffer未找到”错误。
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
有人能帮我用TypeScript做同样的事情吗?
我正在尝试使用TypeScript在NodeJS中进行base64编码。
以下代码在JavaScript中可以正常工作。
当我在TypeScript中编写相同的代码并进行编译时,我会得到“Buffer未找到”错误。
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
有人能帮我用TypeScript做同样的事情吗?
对于IONIC 4开发人员,我是使用以下方式安装的
npm install --save @types/node
当我尝试添加如下所示的"types": ["node"]
时
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": ["node"]
},
对于
tsconfig.json
它没有生效。我不得不将条目添加到
tsconfig.app.json
请参考以下链接获取相关文档。
https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-291658668
如果这对您有用,请告诉我!
序言
Buffer 是 Node.js API 的一部分。由于 TypeScript 默认不知道来自 Node.js 的类,因此您需要安装 声明文件 (类型定义)以针对 Node.js 进行编译。
如果您看到以下错误,则需要手动安装类型定义:
error TS2304: Cannot find name 'Buffer'.
安装类型定义
您可以使用 typings 工具安装类型定义。我将向您展示如何执行此操作:
使用 npm 安装 typings
工具:
npm install -g typings
从 DefinitelyTyped(~dt
)存储库中安装 Node.js 的类型定义:
typings install dt~node --global --save
typings 工具将创建以下目录 "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):error TS1110:Type expected”,则您的Node.js定义过于最新。 typings 工具与最新的类型声明存在问题。在这种情况下,只需检查typings.json
文件中的版本。对我来说,node#6.0.0+20160621231320
可用,但node#6.0.0+20161212163245
不可用。
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();
}
}
更新:
随着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/
对于Angular用户:
npm install --save @types/node
tsconfig.app.json
文件中,将以下两行添加到CompilerOptions中:"compilerOptions": {
//...
"types": ["node"],
"typeRoots": ["node_modules/@types"]
}
缓冲区(Buffer
)来自于Node
命名空间。 首先安装:
npm install --save @types/node
然后在您的tsconfig.json
文件中,在compilerOptions
部分内添加以下代码:
"types": ["node"],
"typeRoots": ["node_modules/@types"]
typesRoots
条目指定包含在内的类型定义文件所在的目录列表。此功能要求使用 TypeScript 版本 2.0 或更高版本。
npm install --save @types/node
并不足够。我还需要在我的 tsconfig.json
中添加 "types": ["node"]
。谢谢。 - Jeremy Walterssrc/tsconfig.app.json
而非tsconfig.json
,这里提供一个在Github上的问题参考链接:https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-320352814 - zakaria amine由于我想在浏览器环境下使用typescript的Buffer
,所以我唯一的解决方案是安装buffer
包。
npm install buffer
然后,在您想要使用它的文件中,
import { Buffer } from 'buffer/';
要在Karma/Jasmine中解决此问题
npm install --save @types/node
tsconfig.spec.json
文件中,将以下两行添加到CompilerOptions中:"compilerOptions": {
//...
"types": [ "jasmine" , "node" ],
"typeRoots": ["node_modules/@types"]
}
npm i -S @types/node
"angularCompilerOptions": {
"types" : ["node"]
....
}
https://fireflysemantics.medium.com/adding-types-node-to-angular-84a629976c86