繁体   English   中英

打字稿对象集类型

[英]Typescript object set type

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

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上进行操作有点莫名其妙。 有任何想法吗?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM