如何使用get方法访问Typescript中对象的字段?

如何使用get方法访问Typescript中对象的字段?,typescript,typescript2.0,Typescript,Typescript2.0,在Typescript中,我定义了一个接口: interface IPriority { KEY1: number; KEY2: number; KEY3: number; DEFAULT: number; } 我将类型为IPriority的对象传递给函数,如下所示: class Foo { async someFunction(priority: IPriority) { const someMap: Map<st

在Typescript中,我定义了一个接口:

interface IPriority {
    KEY1: number;
    KEY2: number;
    KEY3: number;
    DEFAULT: number;
}
我将类型为
IPriority
的对象传递给函数,如下所示:

    class Foo {
        async someFunction(priority: IPriority) {
        const someMap: Map<string, string> = new Map();
        //someMap has been properly initialized and has valid data
        const key = someMap.get("KEY1") ?? "KEY1";
        //const key = "KEY1";
        if(key) {
          const temp = priority[key];
          console.log(temp);
        }
      }
    }
interface IPriority {
  KEY1: string;
  KEY2: string;
  KEY3: string;
} 

class Foo {
   async someFunction(priority: IPriority) {
      const someMap: Map<string, string> = new Map();
      someMap.set("1", "KEY1");
      someMap.set("2", "KEY2");
      someMap.set("3", "KEY3");
      const key1 = someMap.get("1");
      if (key1) {
         let value: string = "";
         Object.keys(priority).map((propertyKey, propertyIndexKey) => {
           if (propertyKey == key1) {
              Object.values(priority).map((propertyValue, propertyIndexValue) => {
                 if (propertyIndexKey == propertyIndexValue) {
                    value = propertyValue;
                 }
           })
        }
        return value;
        })
        console.log(value);
     }
  }
}

const foo: Foo = new Foo();
const priority: IPriority = {
  KEY1: "1",
  KEY2: "2",
  KEY3: "3",
}
foo.someFunction(priority)// "1"
class-Foo{
异步someFunction(优先级:IPriority){
const someMap:Map=newmap();
//someMap已正确初始化并具有有效数据
const key=someMap.get(“KEY1”)??“KEY1”;
//const key=“KEY1”;
如果(关键){
const temp=优先级[键];
控制台日志(temp);
}
}
}
执行此操作时,会出现以下错误:
元素隐式地具有“any”类型,因为“string”类型的表达式不能用于索引类型“IPriority”。在“IPriority”类型上未找到具有“string”类型参数的索引签名。

如果我更改
const temp=priority[key]
对于此
const temp=priority.get(key)
,我得到以下错误:
类型“IPriority”上不存在属性“get”。

如何访问
KEY1
KEY2
。。。使用
get
方法或对象索引语法(
priority[key]


这里有一个指向的链接,显然编译器需要预定义索引值。您有两个选择:

  • 使用
    any
    这样的关键字
    (优先级为any)[key]
  • 创建字典请参见
  • 如上所述,最好在typescript中使用字典,而不是使用
    界面
    映射
    。但是,如果您希望坚持使用您的代码并使用编写的代码,您可以通过在
    对象上定义的两个函数找到已创建键的值:
    对象.keys
    对象.values
    。您可以将
    someFunctions
    方法更改为如下内容:

        class Foo {
            async someFunction(priority: IPriority) {
            const someMap: Map<string, string> = new Map();
            //someMap has been properly initialized and has valid data
            const key = someMap.get("KEY1") ?? "KEY1";
            //const key = "KEY1";
            if(key) {
              const temp = priority[key];
              console.log(temp);
            }
          }
        }
    
    interface IPriority {
      KEY1: string;
      KEY2: string;
      KEY3: string;
    } 
    
    class Foo {
       async someFunction(priority: IPriority) {
          const someMap: Map<string, string> = new Map();
          someMap.set("1", "KEY1");
          someMap.set("2", "KEY2");
          someMap.set("3", "KEY3");
          const key1 = someMap.get("1");
          if (key1) {
             let value: string = "";
             Object.keys(priority).map((propertyKey, propertyIndexKey) => {
               if (propertyKey == key1) {
                  Object.values(priority).map((propertyValue, propertyIndexValue) => {
                     if (propertyIndexKey == propertyIndexValue) {
                        value = propertyValue;
                     }
               })
            }
            return value;
            })
            console.log(value);
         }
      }
    }
    
    const foo: Foo = new Foo();
    const priority: IPriority = {
      KEY1: "1",
      KEY2: "2",
      KEY3: "3",
    }
    foo.someFunction(priority)// "1"
    
    接口优先级{
    键1:字符串;
    键2:字符串;
    键3:字符串;
    } 
    福班{
    异步someFunction(优先级:IPriority){
    const someMap:Map=newmap();
    someMap.set(“1”,“键1”);
    someMap.set(“2”,“键2”);
    someMap.set(“3”,“键3”);
    const key1=someMap.get(“1”);
    如果(键1){
    let值:string=“”;
    Object.keys(priority.map)((propertyKey,propertyIndexKey)=>{
    if(propertyKey==key1){
    Object.values(priority.map)((propertyValue,propertyIndexValue)=>{
    如果(propertyIndexKey==propertyIndexValue){
    值=属性值;
    }
    })
    }
    返回值;
    })
    console.log(值);
    }
    }
    }
    const-foo:foo=new-foo();
    常量优先级:i优先级={
    键1:“1”,
    键2:“2”,
    键3:“3”,
    }
    foo.someFunction(优先级)/“1”
    
    priority[key]有什么问题?@enzo“元素隐式地有一个'any'类型,因为'string'类型的表达式不能用于索引'IPriority'类型。在'IPriority'类型上找不到带'string'类型参数的索引签名。”@StupidMan所以你应该写
    priority[key]
    或将问题更改为包含true。@StupidMan您得到了“元素隐式地具有“any”类型…”错误,因为您可能没有将key定义为
    const
    key。请参阅@StupidMan您的常量键必须是字符串,而不是数字或未定义。这是编译器所必需的。