node.js - Nhận lỗi TS2304: Không tìm thấy tên 'Buffer'
Tôi đang cố gắng thực hiện mã hóa base64 trong NodeJS sử dụng TypeScript.
Đoạn mã sau hoạt động tốt trong JavaScript.
Khi tôi viết cùng một thứ trong TypeScript và biên dịch, tôi nhận được lỗi không tìm thấy Buffer.
var base64Policy = new Buffer(stringPolicy, 'utf-8').toString('base64');
Ai đó có thể giúp tôi làm cùng một việc trong TypeScript không.
Câu trả lời #1
Đối với các nhà phát triển IONIC 4, tôi đã cài đặt nó bằng cách sử dụng
npm install --save @types/node
Khi tôi thử thêm "types": ["node"] như được hiển thị dưới đây
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": ["node"]
},
đến
tsconfig.json
nó không hiệu quả. Tôi đã phải thêm mục vào
tsconfig.app.json
Vui lòng tham khảo liên kết sau cho tài liệu liên quan.
https://github.com/aws/aws-sdk-js/issues/1271#issuecomment-291658668
Hãy cho tôi biết nếu điều đó có hiệu quả với bạn!
Câu trả lời #2
Thêm dòng này ở trên cùng:
declare const Buffer
và nó nên biên dịch mà không có lỗi.
Việc khai báo là cần thiết để sử dụng các thư viện tích hợp sẵn của node hoặc các đối tượng toàn cục khác, bạn có thể khai báo thủ công như trên.
Với phiên bản mới của Typescript, bạn cũng có thể sử dụng các tệp khai báo chính thức:
npm i -g typescript@next
npm i --save-dev @types/node
đối với các thư viện khác, cài đặt @types/library_name.
thêm chi tiết: Cải thiện việc Thu Thập Tệp Khai Báo, Tương Lai của Các Tệp Khai Báo
Câu trả lời số 3
Lời mở đầu
Buffer là một phần của API Node.js. Vì TypeScript mặc định không biết các lớp từ Node.js, bạn sẽ cần cài đặt các tệp khai báo (định nghĩa kiểu) cho Node.js.
Nếu bạn thấy lỗi sau, bạn sẽ phải cài đặt định nghĩa loại thủ công:
lỗi TS2304: Không thể tìm thấy tên 'Buffer'.
Cài đặt Định nghĩa Kiểu
Bạn có thể cài đặt định nghĩa kiểu bằng công cụ typings. Tôi sẽ chỉ cho bạn cách làm điều này:
Cài đặt công cụ
typingsbằng npm:npm install -g typingsCài đặt các định nghĩa kiểu cho Node.js từ kho lưu trữ DefinitelyTyped (
~dt):typings install dt~node --global --save
Công cụ typings sẽ tạo thư mục sau "typings/globals/node" và liên kết nó trong "typings/index.d.ts". Ngoài ra sẽ có một tệp gọi là typings.json (do tùy chọn --save), tệp này tham chiếu các định nghĩa kiểu đã được giải quyết:
{
"globalDependencies": {
"node": "registry:dt/node#6.0.0+20160621231320"
}
}
Lưu ý: Nếu bạn thấy lỗi "typings\globals\node\index.d.ts(71,26): error TS1110: Type expected", thì định nghĩa Node.js của bạn quá mới. Công cụ typings gặp vấn đề với các khai báo kiểu mới nhất. Trong trường hợp này, chỉ cần kiểm tra phiên bản trong tệp typings.json của bạn. Đối với tôi, node#6.0.0+20160621231320 hoạt động nhưng node#6.0.0+20161212163245 thì không.
- Bây giờ tất cả những gì bạn cần làm là thêm
index.d.tsnhư một chỉ thị ba dấu gạch chéo trong mã của bạn (mã sử dụng lớpBuffer):
LớpCủaBạn.ts
/// <reference path="../../typings/index.d.ts" />
export class YourClass {
private static toString(encoded: string): string {
return new Buffer(encoded, "base64").toString();
}
}
CẬP NHẬT:
Với việc phát hành TypeScript 2.0, một hệ thống định nghĩa kiểu mới đã được công bố.
Bây giờ bạn có thể quên công cụ typings đi. Tất cả những gì bạn cần làm là chạy lệnh này để cài đặt các định nghĩa TypeScript cho Node.js:
npm install --save @types/nodeVui lòng cũng đảm bảo rằng bạn có các mục sau trong tsconfig.json của mình:
{
"compilerOptions": {
"moduleResolution": "node",
...
},
"exclude": [
"node_modules",
...
]
}
P.S. Nếu bạn cần các định nghĩa kiểu cho các lớp khác (ngoài những lớp có trong Node.js), bạn có thể tìm chúng tại đây: http://microsoft.github.io/TypeSearch/
Câu trả lời số 4
Dành cho người dùng Angular:
- Chạy lệnh sau
npm install --save @types/node- Trong tệp
tsconfig.app.jsoncủa bạn, thêm hai dòng này vào CompilerOptions:
"compilerOptions": {
//...
"types": ["node"],
"typeRoots": ["node_modules/@types"]
}
Câu trả lời số 5
Bộ đệm là từ không gian tên Node. Trước tiên hãy cài đặt
npm install --save @types/node
sau đó thêm mã dưới đây vào tệp tsconfig.json của bạn bên trong phần compilerOptions
"types": ["node"],
"typeRoots": ["node_modules/@types"]
Mục typeRoots chỉ định một danh sách các thư mục chứa các tệp định nghĩa kiểu sẽ được đưa vào. Nó yêu cầu TypeScript phiên bản 2.0 hoặc mới hơn.
