如何为数组Typescript编写自定义类型?

时间:2018-06-27 10:51:51

标签: typescript typescript2.0

我的界面类型为:

interface IForm {
   id: number;
   name: string;
} 

我需要编写自定义type来存储该对象:

let a = ["one": [IForm, IForm, IForm], "two": [IForm, IForm, IForm]]

如何在TypeScript中构建它?

结果我需要按键获取所有表格吗?

let forms = a["one"]; --> [IForm, IForm, IForm]
forms[0]; --> IForm

2 个答案:

答案 0 :(得分:1)

您可以使用映射类型:

type FormList = { [name: string]: IForm[]; };

或者如果"one""two"是固定属性,只需:

interface FormList {
    one: IForm[];
    two: IForm[];
}

此定义表示属性onetwo始终存在。如果没有,您可以将它们设为可选:

interface FormList {
    one?: IForm[];
    two?: IForm[];
}

答案 1 :(得分:1)

如果值是任意长度的数组并且键是固定的,则可以使用具有这些特定字段的接口

 interface FormList [
     one: IForm[];
     two: IForm[];
 }

如果每个数组中的项目数始终为3,则可以使用元组类型[IForm, IForm, IForm]

 interface FormList [
     one: [IForm, IForm, IForm];
     two: [IForm, IForm, IForm];
 }

如果要允许使用任何密钥,可以使用索引签名

 interface FormList {
     [key: string] : [IForm, IForm, IForm];
 }