Typescript数组的键值对声明

时间:2016-04-19 21:17:00

标签: arrays typescript key-value

对以下声明感到困惑:

constructor(controls: {[key: string]: AbstractControl}, optionals?: {[key: string]: boolean}, validator?: ValidatorFn, asyncValidator?: AsyncValidatorFn)

控件的类型(第一个参数)是什么? 它是一个对象,它是一个键值对数组,其中键是字符串,值是AbstractControl?谢谢!

2 个答案:

答案 0 :(得分:41)

是的,就像你猜测的那样,它是一个js对象,键为字符串,AbstractControl为值。
例如:

{
    "control1": new Control(),
    "control2": new Control()
}

修改

您可以通过两种方式将变量声明为此类型:

let controls: { [key: string]: AbstractControl };

interface ControlsMap {
    [key: string]: AbstractControl;
}

let controls: ControlsMap;

甚至更好:

interface ControlsMap<T extends AbstractControl> {
    [key: string]: T;
}

let controls1: ControlsMap<AbstractControl>;
let controls2: ControlsMap<MyControl>;

答案 1 :(得分:0)

除了上述答案,您还可以在这种情况下使用 Record<Keys,Type> utility type

type ControlsMap = Record<string, AbstractControl>;

const mapping: ControlsMap = {
  keyA: new Control(),
  keyB: new Control(),
};

或者使用泛型:

type ControlsMap<T extends AbstractControl> = Record<string, T>;