键值对声明的打字稿数组
Typescript array of key value pairs declaration
对以下声明感到困惑:
constructor(controls: {[key: string]: AbstractControl}, optionals?: {[key: string]: boolean}, validator?: ValidatorFn, asyncValidator?: AsyncValidatorFn)
控件的类型(第一个参数)是什么?
它是一个对象,它是一个键值对数组,其中键是字符串,值是 AbstractControl?谢谢!
是的,就像你猜的那样,它是一个 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>;
除了上述答案,您还可以使用 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>;
对以下声明感到困惑:
constructor(controls: {[key: string]: AbstractControl}, optionals?: {[key: string]: boolean}, validator?: ValidatorFn, asyncValidator?: AsyncValidatorFn)
控件的类型(第一个参数)是什么? 它是一个对象,它是一个键值对数组,其中键是字符串,值是 AbstractControl?谢谢!
是的,就像你猜的那样,它是一个 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>;
除了上述答案,您还可以使用 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>;