打字稿对象集类型

时间:2018-10-30 23:56:41

标签: javascript typescript

这将读取字符串并创建用于各种操作的对象和数组,但是当返回最终数组时,我需要年份为数字,但现在它是字符串

for (let i = 1; i < allFileLines.length; i++) {
                    const data = allFileLines[i].split("|");
                    if (data.length === newheaders.length) {
                        const tarry: Icface = {
                            title: null as string,
                            id: null as string,
                            year: null as number,
                        };
                        for (let j = 0; j < newheaders.length; j++) {
                            tarry[newheaders[j]] = data[j];
                        }
                        if (typeof tarry[2] === "number") {
                            Log.trace("number");
                        }
                        // tslint:disable-next-line:no-console
                        // console.log(lines);
                        // Log.trace(JSON.parse(JSON.stringify(tarry)));
                        lines.push(tarry);
                    }
                }

并且界面是

export interface Icface {
    title: string;
    id: string;
    year: number;
    [key: string]: string | number;
}

因此,在处理之后,年份将返回为“ 2018”,但必须是2018。我能够用<和===在字符串year上进行操作有点莫名其妙。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您已将字符串拆分为字符串数组,请尝试

const tarry: Icface = {
  title: data[0],
  id: data[1],
  year: parseInt(data[2]),
};

答案 1 :(得分:0)

下面的接口Icface允许属性year为字符串或数字

export interface Icface {
  title: string;
  id: string;
  year: number;
 [key: string]: string | number; // it allows ['year'] be string or number
}

请尝试将for (let j = 0; j < newheaders.length; j++)的for循环更改为

for (let j = 0; j < newheaders.length; j++) {
  if (newheaders[j] === 'year') {
    tarry.year = +data[j];
  else {
    tarry[newheaders[j]] = data[j];
  }
}