Javascript TypeScript:如何将文件导入index.ts,而不必为数据定义未定义的内容

Javascript TypeScript:如何将文件导入index.ts,而不必为数据定义未定义的内容,javascript,node.js,typescript,Javascript,Node.js,Typescript,我目前有这样的逻辑: import { readFileSync } from "fs"; export class Data { Address: string; General_Plan_Designation: string; Latitude: number; Longitude: number; static DELIMITER = ","; constructor(rawRow: string) { con

我目前有这样的逻辑:

import { readFileSync } from "fs";

export class Data {
  Address: string;
  General_Plan_Designation: string;
  Latitude: number;
  Longitude: number;

  static DELIMITER = ",";

  constructor(rawRow: string) {
    const data = rawRow.split(Data.DELIMITER);

    this.Address = data[0];
    this.General_Plan_Designation = data[1];
    this.Latitude = parseFloat(data[2]);
    this.Longitude = parseFloat(data[3]);
  }
}

const ROW_DELIMITER = "\r\n";

const rawData = readFileSync("src/Cales_trim_down.csv", {
  encoding: "utf-8",
});

const data: Data[] = [];

for (const rawRow of rawData.split(ROW_DELIMITER)) {
  data.push(new Data(rawRow));
}
哪个控制台成功地记录了以下内容:

[start:run]   Address {
[start:run]     Address: '138 Stockton Ave',
[start:run]     Latitude: 37.3327991,
[start:run]     Longitude: -121.9040357
[start:run]   },
[start:run]   Address {
[start:run]     Address: '641 N Capitol Av ',
[start:run]     Latitude: 37.3762739,
[start:run]     Longitude: -121.8496285
[start:run]   },
[start:run]   Address {
[start:run]     Address: '535 N 7th St ',
[start:run]     Latitude: 37.348071,
[start:run]     Longitude: -121.8911488
[start:run]   },
[start:run]   Address {
[start:run]     Address: '750 W San Carlos St ',
[start:run]     Latitude: 37.3234717,
[start:run]     Longitude: -121.9044348
[start:run]   },
我将它放在自己的
Data.ts
文件中,然后将其导入
index.ts
文件,但如果我这样做:

import { Data } from "./Data";

const data = new Data('Cales_trim_down.csv');

console.log(data);
我必须传入一些参数,例如csv文件作为字符串,然后我得到以下数据结构:

    Data {Address: "Cales_trim_down.csv", General_Plan_Designation: undefined, Latitude: NaN, Longitude: NaN}
     Address: "Cales_trim_down.csv"
     General_Plan_Designation: undefined
     Latitude: NaN
     Longitude: NaN
     __proto__: Object
和以前完全不同。将
数据
类导入到我的项目的根文件中而不丢失控制台记录的数据的完整性的最佳方法是什么

如果我不必将
Cales\u trim\u down.csv
传递到
Data
的实例,那么这将是一个理想的选择,但是我无法以一种不必向构造函数传递任何参数的方式重构
Data
类。提前声明
filename
无法解决此问题


我的另一个想法是,我不应该传入
cales\u trim\u down.csv的字符串,而是
rawData
,但当我这样做时,它告诉我它找不到
rawData

,首先,你在
for
循环中向
data
构造函数提供一行数据。使用
readFileSync(“src/Cales\u trim\u down.csv”)
加载数据。在第二个实例中,您正在为
新数据
提供一个字符串,该字符串是文件的位置。这是两个完全不同的论点。在第二种情况下,您的
数据
实例没有实际读取任何数据,这就是所有值都未定义的原因。它与您正在模块化
数据
类这一事实无关,而是与您用来创建
新数据
实例的内容有关

在自己的文件中定义数据类:

//Data.ts
导出类数据{
//…逻辑和以前一样
}
然后使用与之前相同的逻辑:

import { Data } from "./Data";

// const data = new Data('Cales_trim_down.csv'); <--- No!

const ROW_DELIMITER = "\r\n";

const rawData = readFileSync("src/Cales_trim_down.csv", {
  encoding: "utf-8",
});

const data: Data[] = [];

for (const rawRow of rawData.split(ROW_DELIMITER)) {
  data.push(new Data(rawRow));
}
所以现在所有的数据方法,包括读取数据、解析行等,都包含在数据类中。我想这会更整洁


另外,看起来您正试图使用此代码将CSV转换为JSON?肯定有一些库已经这样做了吗?

我唯一能告诉你的是,当组件的标题看起来应该是时,你没有使用默认导出,但我不知道这是否有帮助。@AlexanderHemming,是的,唯一没有帮助的是不再将其命名为导出,所以我不需要花括号,但仍然存在需要论证的实例的问题。我正要添加一个答案,我必须将
rawData
传递给实例,但这会给我一个错误,但我所要做的就是导出该变量。我会标记你的答案,但添加一个补充答案。哦,有趣的是,你的答案看起来比我的更好,因为它只解决了问题的一半。我的意思是有很多方法可以做到这一点。根据您想要使用数据的方式,我会考虑编写一个在代码>数据> /代码>上的方法,该方法确实占用了文件路径并为您处理所有的循环,包含在类中。取决于你在做什么你的解决方案解决了我的两个问题。在导出变量后,我将传入
rawData
int
Data
的实例,但仍然会留下未定义的全部内容,您的解决方案,虽然可能会重复一些逻辑,但它为我提供了一个更好的解决方案,因为它在所有数据中循环,非常完美,谢谢。在我仍然维护该数据类的实例的情况下,有没有办法做到这一点?我最终需要它来将它传递给另一个实例。