繁体   English   中英

如何在Typescript中为数组创建接口

[英]How can I create interface in Typescript for array

我想在打字稿中创建一个接口以接收此值:

{
  "ABANDONED VEH": 4,
  "ADMINISTRATION": 4,
  "ALARM-BUS/RES": 4
}

当我尝试使用自己创建的正确接口时,出现错误:

类型字符串不可分配给IMapping

我已经尝试过的:

export interface IMapping {
  [key: string]: { value: string };
}

export interface IMapping {
  key: any;
}

[key: string]: string;

PS。 这是我的真实代码:

文件interface.ts:

export interface IMapping {
  [key: string]: number;
}

使用此接口的文件:

import { IMapping } from '../interfaces';
const mapping: IMapping =  '{'
  + '"ABANDONED VEH": 4,'
  + '"ADMINISTRATION": 4"}';

根据数据的形状,界面中的值类型应为number而不是{ value: string }

export interface IMapping {
  [key: string]: number;
}

或者,如果您想指定属性:

export interface IMapping {
  'ABANDONED VEH': number,
  'ADMINISTRATION': number,
  'ALARM-BUS/RES': number
}

但是,根据您的错误消息和代码,您正在为无效类型为IMapping的对象分配一个字符串。

类型字符串不可分配给IMapping

const mapping: IMapping =  '{'
  + '"ABANDONED VEH": 4,'
  + '"ADMINISTRATION": 4"}';
//                      ^ remove this and use JSON.parse()

如果您在编译时知道该对象,则使用文字表达式对其进行定义:

const mapping: IMapping = {
  "ABANDONED VEH": 4,
  "ADMINISTRATION": 4,
  "ALARM-BUS/RES": 4
}

如果您的数据来自字符串格式的API,请在其上使用JSON.parse()

const mapping: IMapping = JSON.parse('{"ABANDONED VEH": 4,"ADMINISTRATION": 4,"ALARM-BUS/RES": 4}');

但是请注意,您的字符串不是有效的JSON,在最后4字符后有尾随"

这看起来像是在输入数据。

interface IMapping {
  [key: string]: number;
}

const data: IMapping = {
  "ABANDONED VEH": 4,
  "ADMINISTRATION": 4,
  "ALARM-BUS/RES": 4
};

但是,不清楚为什么要谈论arrays (索引arrays ),在这种情况下,您可能需要一个IMapping列表

const list: IMappings[] = [
  {
    "ABANDONED VEH": 4,
    "ADMINISTRATION": 4,
    "ALARM-BUS/RES": 4
  },
  {
    "ABANDONED VEH": 5,
    "ADMINISTRATION": 5,
    "ALARM-BUS/RES": 5
  },
];

您的值是数字,而不是字符串。 你应该试试:

export interface IMapping {
  [key: string]: number;
}

您的第二个版本的any类型将无法使用,因为您没有使用方括号-这将期望使用名称为key的属性,而不是类似字典的对象。

编辑

编辑之后,很明显,您正在尝试分配一个字符串。 您应该直接分配对象:

const mapping: IMapping =  {
  "ABANDONED VEH": 4,
  "ADMINISTRATION": 4};

暂无
暂无

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

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