我正在尝试使用TypeScript在NodeJS中执行base64编码。
以下代码在JavaScript中正常运行。
当我在TypeScript中编写相同的东西并进行编译时,我发现缓冲区找不到错误。
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
有人可以帮我在TypeScript中做同样的事情。
答案 0 :(得分:32)
在顶部添加此行:
declare const Buffer
它应该编译没有错误。
使用内置库或其他全局对象的节点需要声明,您可以像上面一样手动声明它。
使用新版本的Typescript,您还可以使用官方声明文件:
npm i -g typescript@next
npm i --save-dev @types/node
对于其他库,请安装@types/library_name
。
更多详情:Improve Declaration File Acquisition,The Future of Declaration Files
答案 1 :(得分:19)
<强>序言强>
Buffer是Node.js API的一部分。由于TypeScript默认情况下不知道Node.js中的类,因此您需要为Node.js安装declaration files(类型定义)。
如果您看到以下错误,则必须手动安装类型定义:
错误TS2304:找不到名称&#39;缓冲区&#39;。
安装类型定义
您可以使用typings工具安装类型定义。我会告诉你如何做到这一点:
使用npm:
安装typings
工具
npm install -g typings
从DefinitelyTyped(~dt
)存储库安装Node.js的类型定义:
typings install dt~node --global --save
打字工具将创建以下目录&#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
没有。
index.d.ts
作为triple-slash directive(使用Buffer
类):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用户:
npm install --save @types/node
tsconfig.app.json
文件中,将这两行添加到CompilerOptions中:"compilerOptions": {
//...
"types": ["node"],
"typeRoots": ["node_modules/@types"]
}
答案 5 :(得分:0)
要在Karma / Jasmine中解决此问题
npm install --save @types/node
tsconfig.spec.json
文件中,将这两行添加到CompilerOptions中:"compilerOptions": {
//...
"types": [ "jasmine" , "node" ],
"typeRoots": ["node_modules/@types"]
}