【问题标题】:Typescript array of key value pairs declaration键值对声明的打字稿数组
【发布时间】:2016-08-12 07:06:27
【问题描述】:
对以下声明感到困惑:
constructor(controls: {[key: string]: AbstractControl}, optionals?: {[key: string]: boolean}, validator?: ValidatorFn, asyncValidator?: AsyncValidatorFn)
控件的类型是什么(第一个参数)?
它是一个对象,它是一个键值对数组,其中键是字符串,值是 AbstractControl?谢谢!
【问题讨论】:
标签:
arrays
typescript
key-value
【解决方案1】:
除了上面的答案,你也可以使用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>;
【解决方案2】:
是的,就像你猜的那样,它是一个 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>;