打字稿csv-parse

nik*_*las 6 csv typescript typescript-typings

我试图解析一个csv文件与typescript,我是全新的.我不能让解析器使用正确的类型.

没有打字,一切都很简单:

var fs = require('fs');
var parse = require('csv-parse');

var parser = parse({delimiter: ';'}, function(err, data){
  console.log(data);
});

fs.createReadStream(__dirname+'/fs_read.csv').pipe(parser);
Run Code Online (Sandbox Code Playgroud)

但是当涉及到打字稿我得到错误时,我安装了来自dt的打字:

import * as csvParse from 'csv-parse';
import fs = require('fs');
var myParser:csvParse.CsvParser = csvParse({delimiter: ','}, function(data, err) {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Type 'void | CsvParser' is not assignable to type 'CsvParser'.
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个提示或使用带有打字稿的csv-parse并分享他们的代码吗?

Ros*_*ott 8

这只是一个简单的转换问题,所有代码都是正确的,它只需要TS帮助知道从CsvParse返回的内容.如果你看一下定义文件,它的返回签名就是void|parse.CsvParser.所以告诉TS它实际上是一个CsvParser(而不是void)只是强制转换它:

var myParser:csvParse.CsvParser = csvParse({delimiter: ','}, function(data, err) {
    console.log(data);
}) as csvParse.CsvParser;
Run Code Online (Sandbox Code Playgroud)


小智 7

1. 让 typescript 为你完成工作

不要解释您想要哪种类型作为方法的结果csvParse

var myParser = csvParse({delimiter: ','}, function(data, err) {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

2.使用原来的cast操作符<>

var myParser:csvParse.CsvParser = <csvParse.CsvParser> csvParse({delimiter: ','}, function(data, err) {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

注意:这仅适用于.ts文件。在.jsx文件中,您将看到错误“预期相应的 JSX 结束标记...”

3.使用new运算符as

var myParser:csvParse.CsvParser = csvParse({delimiter: ','}, function(data, err) {
  console.log(data);
}) as csvParse.CsvParser;
Run Code Online (Sandbox Code Playgroud)