Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将动态api响应分配给typescript接口_Javascript_Typescript - Fatal编程技术网

Javascript 将动态api响应分配给typescript接口

Javascript 将动态api响应分配给typescript接口,javascript,typescript,Javascript,Typescript,我不熟悉typscript和nodejs。我试图分配一个响应,从restful api调用获取它到typescript接口。我不想使用Object.keys或Obejct.values来获取所需的数据,但尝试使用typescirpt接口 以下是回应 // this is dynamic in nature { return: [{ 'domain1.com': true, 'domaim2.com': true, 'domain3.com': tr

我不熟悉typscript和nodejs。我试图分配一个响应,从restful api调用获取它到typescript接口。我不想使用Object.keys或Obejct.values来获取所需的数据,但尝试使用typescirpt接口

以下是回应

// this is dynamic in nature
{ 
  return: [{ 
      'domain1.com': true, 
      'domaim2.com': true, 
      'domain3.com': true 
      }]
} 
域名键值不限于3,可能是n。上面的响应甚至不是json,但这就是我从响应中得到的

我正在使用以下ts接口分配响应

 export interface ResponseString {
     Res: string;
 }

 export interface ServerRes {
         return: ResponseString[];
 }

try {
       data =  await getServerResponse();
   }
   catch (e) {
       console.error(e);
       throw new Error("Exception: failure ..");
   }
   try {
       const Servers: string[] = Object.keys(data.return[0]); // I want to use tyscrpit interface instread of object.keys to get the domains 

       for (const server of Servers) {
           // to be done
   }
   catch(e) {
        console.error(e);
   }
请分享您对如何实现这一目标的意见

[更新]

我还收到了其他API响应,如下所示

{ return: [ 
    { 'domainroot.com':'domain1.com' : ['some valu, 'some other value'] } 
]}
这些响应也是动态的,但只有键值发生了变化,但对象并没有发生变化

{ ret: [ {'df':'df' : [ 'df', 'dfd']}]}

谢谢,

您需要定义一个带有签名的接口
字符串:boolean

const data = {
  "retval": [{
    "domain1.com": true,
    "domaim2.com": false,
    "domain3.com": true
  }]
};

interface ServerStatusList {
  [key: string]: boolean;
}

const servers: ServerStatusList = data.retval[0];


for (let server in servers) { 
  console.log(`server ${server} : ${servers[server]}`);
}

您需要定义一个带有签名的接口
string:boolean

const data = {
  "retval": [{
    "domain1.com": true,
    "domaim2.com": false,
    "domain3.com": true
  }]
};

interface ServerStatusList {
  [key: string]: boolean;
}

const servers: ServerStatusList = data.retval[0];


for (let server in servers) { 
  console.log(`server ${server} : ${servers[server]}`);
}

这是类型定义

interface ServerResponse  {
  ['return']: { [k: string]: boolean }[]
};

let r: ServerResponse = { 'return':[ { 'domain1.com': true,'domaim2.com': true,'domain3.com': true } ] }

无论如何,您必须使用Objects.keys枚举服务器

这是类型定义

interface ServerResponse  {
  ['return']: { [k: string]: boolean }[]
};

let r: ServerResponse = { 'return':[ { 'domain1.com': true,'domaim2.com': true,'domain3.com': true } ] }


无论如何,您必须使用Objects.key枚举服务器

。除了实际“返回”之外,使用其他东西不是一个好主意。好的,改为retval,但我不确定如何将{'key':true,'key2',true…}映射到接口。为什么不使用Object.keys?这是枚举Objective动态键的标准方法,我正试图通过在任何地方使用接口来构造它。。除了实际“返回”之外,使用其他东西不是一个好主意。好的,改为retval,但我不确定如何将{'key':true,'key2',true…}映射到接口。为什么不使用Object.keys?这是枚举Objective动态键的标准方法。我正在尝试通过在任何地方使用接口来构造它。感谢您的回答,我将尝试此方法。您是对的,在某些地方我们需要使用Object.keys或Object.Values。上述代码与要求不符,但我理解我们必须使用Object,动态响应的键或Object.Value,目前无法将其指定给接口。所以接受这个答案。谢谢你的回答,我会尝试一下。你是对的,在某些地方我们需要使用Object.keys或Object.values。上面的代码不能很好地满足要求,但我知道我们必须使用Object、keys或Object.values来进行动态响应,而目前还不能将其分配给接口。所以接受这个答案。谢谢你的回答,我会尝试一下。我在typescript中遇到编译问题,其他代码也会得到响应,这些都是动态的,与上面的示例略有不同。在这种情况下,我选择/强制使用Obejct.keys或Object.values,我在代码中使用的所有内容都是类型化的。在上面的示例中,数据没有被键入,我想这就是为什么我在尝试移植此示例代码时出错的原因。如果您的问题中没有正确的代码,我们就看不出可能有什么错误。您的代码更新没有任何意义<代码>{'df':'df':['df','dfd']}不是有效的javascript对象或JSONYes它不是有效的json或javascript对象。即使第一个例子也不是一个有效的回答。有人从stackoverflow中查看并更正了它。感谢您的回答,我将尝试一下。我在typescript中遇到编译问题,其他代码也得到响应,这些也是动态的,与上面的示例略有不同。在这种情况下,我选择/强制使用Obejct.keys或Object.values,我在代码中使用的所有内容都是类型化的。在上面的示例中,数据没有被键入,我想这就是为什么我在尝试移植此示例代码时出错的原因。如果您的问题中没有正确的代码,我们就看不出可能有什么错误。您的代码更新没有任何意义<代码>{'df':'df':['df','dfd']}不是有效的javascript对象或JSONYes它不是有效的json或javascript对象。即使第一个例子也不是一个有效的回答。有人从stackoverflow处对其进行了审查,并对其进行了更正。