Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript索引签名返回缺少索引签名的数组结果_Typescript - Fatal编程技术网

Typescript索引签名返回缺少索引签名的数组结果

Typescript索引签名返回缺少索引签名的数组结果,typescript,Typescript,我有一个类似JSON的 "phone":{ "home":[{"label":"Phone1", "val":"123"},{"label":"Phone1", "val":"123"},{"label":"Phone1", "val":"123"}], "work":[{"label":"Phone1", "val":"123"}, {"label":"Phone1", "val":"123"}, {"label":"Phone1", "val":"123"}], "....":[{"labe

我有一个类似JSON的

"phone":{
"home":[{"label":"Phone1", "val":"123"},{"label":"Phone1", "val":"123"},{"label":"Phone1", "val":"123"}],
"work":[{"label":"Phone1", "val":"123"}, {"label":"Phone1", "val":"123"}, {"label":"Phone1", "val":"123"}],
"....":[{"label":"Phone1", "val":"123"}]}
因此可能会有更多的电话对象,如紧急电话等,但我知道的是,该值将是一个label/val对象数组

所以我创建了一个接口

export interface Person {
    phone:IHashOfPhones
}

export interface IHashOfPhones {
    [index:string]: Phone[]
}

export interface Phone {
    label: string;
    val:string; 
}
然而,在编译过程中,我遇到了如下错误

Index signature is missing in type { home : ...
如果我将
IHashOfPhones
设置为返回
any
一切正常,但我松开了类型安全

在代码中,我只循环它,没有赋值

有没有办法确保类型安全,或者我做了一些完全错误的事情?

使用可转位类型 从JSON字符串:

let jsonString: string = `{
  phone: {
    home: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    work: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    other: [{ label: "Phone1", val: "123" }]
  }
}`;
let data1: Person = JSON.parse(jsonString);
或者,从JS对象:

let data2: Person = <any>{
  phone: {
    home: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    work: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    other: [{ label: "Phone1", val: "123" }]
  }
};

我想我和你做的一样,但在我的例子中,返回数组是因为某种原因不起作用的,该死……不,对象不是字符串。只需使用“来自JS对象”的示例,并将其转换为
export interface IHashOfPhones { // Replace the other implementation by this one
  home?: Phone[]
  work?: Phone[]
  other?: Phone[]
}
let data3: Person = {
  phone: {
    home: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    work: [{ label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }, { label: "Phone1", val: "123" }],
    other: [{ label: "Phone1", val: "123" }]
  }
};