如何使用get方法访问Typescript中对象的字段?
在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
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]
界面
和映射
。但是,如果您希望坚持使用您的代码并使用编写的代码,您可以通过在对象上定义的两个函数找到已创建键的值:对象.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您的常量键必须是字符串,而不是数字或未定义。这是编译器所必需的。