고궁 박물원 패키지 csv-parse는 API 같은 Node.js를 스트림을 구현TypeScript에서 Stream-like 인터페이스를 선언하는 방법은 무엇입니까?
const parser = parse();
parser.on('readable',() => {
let record: any; // <-- it should be string[]
while (record = parser.read()) {
output.push(record);
}
});
그 type declaration은 다음과 같습니다
이interface parse {
(options?: options): NodeJS.ReadWriteStream;
}
parse
의 반환 형식이 string | Buffer
을 반환하는 방법 read
을 가지고 NodeJS.ReadWriteStream
이다. 이 정의에 의해
interface ReadWriteStream extends ReadableStream, WritableStream {
// ...
}
interface ReadableStream extends EventEmitter {
read(size?: number): string | Buffer;
// ...
}
, I 형은 실제 string[]
에 let record: any = parser.read()
변수를 정의 할 수있다.
내가 유형 정의 수정 시도 같은 CSV를-분석 : 타이프 라이터가 인터페이스 변경 방법의 반환 유형을 확장 할 수 없습니다 때문에
interface ParserStream extends NodeJS.ReadWriteStream {
read(size?: number): string[];
}
interface parse {
(options?: options): ParserStream;
}
그것은 작동하지 않습니다. 내가 생각할 수있는 어떤
같은 일반적인 유형 NodeJS 스트림을 변경하는 것입니다 :
interface GenericReadableStream <T> extends EventEmitter {
read(size?: number): T
// ...
}
interface ReadableStream extends GenericReadableStream <string | Buffer> {}
은 그 때 나는 정의 할 수 있습니다 : 그것은 좋은 방법이 있다면
interface ParserStream extends GenericReadableStream <string[]> {}
모르겠어요. 현재 Node.JS 유형 정의에 많은 영향을줍니다. 시작하기
필자는 TypeScript 2.0.3에서 테스트를 마쳤습니다. 'any'와'string []'의 상호 작용은'any'입니다. 따라서'number [] '에 여전히 할당 할 수 있습니다. – aleung
오 예 답변을 단순화하고 확인하지 않았습니다. ReadWriteStream과 CsvParser 사이에 하나의 중간 인터페이스가 필요합니다.이 인터페이스에서'any & string []'을 반환하기 위해'read'를 재정의하면 CsvParser에서'string []'만 반환하도록 재정의 할 수 있습니다. 나는 다시 점검하고 대답을 업데이트 할 것이다. – artem
답변을 업데이트했습니다. 이제는 제대로 작동 할 것입니다. – artem