代码之家  ›  专栏  ›  技术社区  ›  Mohd. Monis

在typescript中定义对象键的类型

  •  0
  • Mohd. Monis  · 技术社区  · 6 年前

    我是typescript新手,我想为我的对象键定义类型,我已经检查了一些方法来实现它,但是在分配不同类型的值时不会抛出错误。例如

    interface sectionProp { 
        _type1: String,
        _columnStrechAllowed: Boolean,
        _columnOccupancy: Number,
        is_mandatory: Boolean
    }
    
    
    export class sectionProperties {
      folioSectionContentProp = <sectionProp> {}
    
      constructor(type?) {
        this.folioSectionContentProp._type1 = type;
        this.folioSectionContentProp._columnStrechAllowed = false;
        this.folioSectionContentProp._columnOccupancy = 6;
        this.folioSectionContentProp.is_mandatory = false;
      }
    
    }
    
    export class createNewSection extends sectionProperties {
      constructor() {
        super("Test") // here I will assign value
     // super(12)     //@ this does not generate any error as well
     // I might assign value by some other way (from object creation) 
     // but I want to know the reason if type is defined then it should 
     // not accept any value other than type 
      }
    
    }
    
    var z = new createNewSection();
    console.log(z)
    

    PS:我想定义我的对象键类型

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Titian Cernicova-Dragomir    6 年前

    问题是您实际上没有为 type 的构造函数中的参数 sectionProperties 所以假设是 any 任何东西都可以从任何东西分配到任何东西。您需要显式类型批注:

    interface sectionProp {
        _type1: String,
        _columnStrechAllowed: Boolean,
        _columnOccupancy: Number,
        is_mandatory: Boolean
    }
    
    
    export class sectionProperties {
        folioSectionContentProp = <sectionProp>{}
    
        constructor(type: string) {
            this.folioSectionContentProp._type1 = type;
            this.folioSectionContentProp._columnStrechAllowed = false;
            this.folioSectionContentProp._columnOccupancy = 6;
            this.folioSectionContentProp.is_mandatory = false;
        }
    
    }
    
    export class createNewSection extends sectionProperties {
        constructor() {
            super("Test") // here I will assign value
            // super(12)     //would be an error
        }
    
    }
    

    您可以考虑指定 noImplicitAny 编译器选项,强制指定编译器无法推断的类型。