Daw*_*i67 11 node.js typescript fetch-api node-streams
包.json
{
"type": "module",
"dependencies": {
"@types/node": "^18.6.5",
"typescript": "^4.7.4"
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"target": "ES2021",
"module": "ESNext",
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
Run Code Online (Sandbox Code Playgroud)
使用节点 v18.7.0,我尝试将从本机 fetch API 返回的网络流转换为节点流。我使用“node:stream”模块中的 Readable.fromWeb 方法。Typescript 返回类型检查错误,但代码使用 @ts-ignore 注释按预期工作。
类型错误
Argument of type 'ReadableStream<Uint8Array>' is not assignable to parameter of type 'ReadableStream<any>'.
Type 'ReadableStream<Uint8Array>' is missing the following properties from type 'ReadableStream<any>': values, [Symbol.asyncIterator]
const nodeStream = Readable.fromWeb(fetchRequest.body)
Run Code Online (Sandbox Code Playgroud)
源代码
Argument of type 'ReadableStream<Uint8Array>' is not assignable to parameter of type 'ReadableStream<any>'.
Type 'ReadableStream<Uint8Array>' is missing the following properties from type 'ReadableStream<any>': values, [Symbol.asyncIterator]
const nodeStream = Readable.fromWeb(fetchRequest.body)
Run Code Online (Sandbox Code Playgroud)
提取类型是否存在错误,或者我做错了什么?
问题是你的获取不是nodejs获取,它是DOM获取
@types/NodeJS没有获取
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/60924#issuecomment-1236920407
这不是TheFetchYouAreLookingFor.jpg
你可以用以下方法解决这个问题
import type * as streamWeb from 'node:stream/web';
declare global {
interface Response {
readonly body: streamWeb.ReadableStream<Uint8Array> | null;
}
}
Run Code Online (Sandbox Code Playgroud)
作为streamWeb.ReadableStream扩展ReadableStream
,或使用外部定义,如链接的线程中
declare global {
export const {
fetch,
FormData,
Headers,
Request,
Response
}: typeof import('undici')
export type {FormData, Headers, Request, RequestInit, Response} from 'undici'
}
export {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |