【问题标题】: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>;
      

      【讨论】:

      • 如何声明这种类型的私有变量?
      • @mishap 检查我修改后的答案
      猜你喜欢
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2020-06-04
      • 2019-02-12
      • 2018-12-11
      • 2018-11-06
      • 2021-01-20
      • 2020-01-08
      相关资源
      最近更新 更多