如何在打字稿对象接口中键入字符串作为对象属性键?

时间:2019-05-03 18:10:31

标签: typescript object-type

我定义了一个接口-相关部分在这里:

      actors:{    
        name:{           // options (Object) is specific to each actor type
                        // see documentation at top of each actor
          factory:string,
          url:string,
          options:Object
        }
        //...
      }

我实现如下接口:

      actors:{
        'unitcube':{ 
          factory:'Unitcube',
          url:'../src/app/models/stage/actors/objects/unitcube',
          options:{wireframe:false, 
                color:'red', 
                opacity:0.9, 
                transform:{t:[0.0,2.0,-3.0001],e:[0.0,1.0,0.0],s:[1.0,3.0,1.0]}
          } 
        }
        //...
      }//actors

该接口通过tslint,但是我收到tslint / tsc错误,该错误是接口的类型和实现不同-特别是'unitcube'和名称。

如何键入指定字符串名称的对象的列表? (即如何在界面的actor部分中定义“名称”?)

谢谢。

1 个答案:

答案 0 :(得分:0)

interface IActors {
   actors: IActorType
}

interface IActorType {
  [name: string]: //so on and so forth
}

问题中定义的接口将键强制为字面意义上的“名称”。当使用“ unitcube”或任何其他参与者的名称实现时,其值将不等于“名称”。[名称:字符串]允许此操作键是动态的,因此可以使用字符串类型的任何角色名称。